【发布时间】:2013-11-27 18:52:54
【问题描述】:
我有一个我想重构的方法,它看起来(嗯,非常简化)如下:
import com.sun.tools.javac.util.Pair;
private int foo(Pair<String, ?>... params) {
if (params[0].snd instanceof String) {
// do something
return 0;
} else if (params[0].snd instanceof ArrayList) {
// do something else
return 1;
}
return -1; // realistically in the code base, this line will never happen **edit: disregard this line
}
所以我想我会做一些事情,比如把它分成两种方法,这样我就不必进行类型检查了。 (这甚至是一个很好的重构吗?)
所以我想做这样的事情:
private int foo(Pair<String, String>... params) {
// do something
return 0;
}
private int foo(Pair<String, ArrayList>... params) {
// do something else
return 1;
}
但是编译器一直告诉我foo() 方法具有相同的类型擦除。 java是否只是删除Pair<A, B>知道的所有内容?如果是这样,那么重构的最佳方法是什么? (或者是否需要重构)
【问题讨论】:
-
我会使用你的第一种方法。但是我会用
throw new IllegalArgumentsException("message");替换return -1;
标签: java generics compilation refactoring type-erasure