Java 使用超类作为泛型子类型中的类型参数
为什么这个代码段会给出一个不兼容的类型错误Java 使用超类作为泛型子类型中的类型参数,java,generics,Java,Generics,为什么这个代码段会给出一个不兼容的类型错误 public class Sample<T extends Number> { T doSomething() { return new Integer(0); } } 公共类示例{ T doSomething(){ 返回新的整数(0); } } 它给出了一个编译器错误,因为对于编译器来说,T可以是任何扩展字符串的东西,所以字符串将不匹配T,除非T确实是字符串,它不能也不会假设它。为此,编译器忽略了Stri
public class Sample<T extends Number> {
T doSomething() {
return new Integer(0);
}
}
公共类示例{
T doSomething(){
返回新的整数(0);
}
}
它给出了一个编译器错误,因为对于编译器来说,T
可以是任何扩展字符串的东西,所以字符串
将不匹配T
,除非T
确实是字符串
,它不能也不会假设它。为此,编译器忽略了String
是final
类这一事实
在这种情况下,使用泛型类型参数T
是无用的。这更清楚,它将编译
public class Sample {
String doSomething() {
return "test";
}
}
我不明白。。。将字符串
替换为数字
并返回新整数(0)
;它仍然给出相同的错误。我知道泛型在这个例子中完全没有用处,这只是我问题的一个过于简化的例子。值得注意的是,使用新字符串
是退化的。@CihatKeser如果T
是Long
或Double
或biginger
?此处不能返回整数。返回值必须是T
或null
@borisspider我太专注于泛型方面了,以至于我甚至没有注意到对新字符串
传递字符串
的无用调用!我现在已经删除了它。答案与当前问题无关,但我认为这不是你的错@rgetman