假设我有这样的代码
class B<T extends String>
{
T f(T a){
return a+"def";
}
}
为什么它会给我一个编译时错误&#34;错误:不兼容的类型&#34;?为什么我不能像String一样使用扩展String的东西?
答案 0 :(得分:4)
+
运算符应用于String
,其他任何内容都是String
并置运算符,并生成String
。
您的返回类型为T
,而不是String
。 T
可能(不会,但理论上可以)是String
的任何子类型。因此,不允许编译。
同样,
class Foo {}
class B<T extends Foo> {
T f(T a) {
return new Foo();
}
}
class Bar extends Foo {}
但
new B<Bar>().f(new Bar());
的返回类型应为Bar
,但会返回Foo
。这没有意义,所以不编译。
答案 1 :(得分:-1)
String
是final
,没有什么可以扩展它,所以你的通用类&#39;定义并不真正有用。我很惊讶<T extends String>
编译。