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