我有以下两节课:
public class GenericNumberOperation {
public GenericNumberOperation() {}
public T getSomeValue (boolean tf) {
T number;
if(tf) {
number = new Double(1.0);
}
else {
number = new Integer(11);
}
return (T) number;
}
}
和:
public class GenericNumberTest {
public GenericNumberTest() {}
public static void main(String[] args) {
GenericNumberOperation gno = new GenericNumberOperation();
Double d = gno.getSomeValue(true);
Integer i = gno.getSomeValue(false);
}
}
当我运行测试时,一切都是笨拙的。如果我将类型参数化更改为:
public T getSomeValue(boolean tf)
编译器抱怨,报告:
错误:类型不兼容的整数不能转换为T number = new Integer(11);
其中T是类型变量T扩展了在方法getSomeValue(boolean)中声明的Object
它同样对Double有所抱怨。为什么?
编辑:我犯了一个错误。这实际上是有效的代码。
public class GenericNumberOperation {
public GenericNumberOperation() {}
public T getSomeValue (boolean tf) {
Number number;
if(tf) {
number = new Double(1.0);
}
else {
number = new Integer(11);
}
return (T) number;
}
}
现在我明白了@Sotirios在干什么。