Java 为什么参数类型扩展字符串可以';不要像绳子一样使用
假设我有这样的代码Java 为什么参数类型扩展字符串可以';不要像绳子一样使用,java,generics,Java,Generics,假设我有这样的代码 class B<T extends String> { T f(T a){ return a+"def"; } } B类 { tf(ta){ 返回一个+“def”; } } 为什么它会给我一个编译时错误“错误:不兼容类型”?为什么我不能使用像字符串一样扩展字符串的东西?应用于字符串的+运算符,其他任何东西都是字符串串联运算符,并生成字符串 您的返回类型是T,而不是StringT可以(不会,但理论上可以)是String的任何子类型
class B<T extends String>
{
T f(T a){
return a+"def";
}
}
B类
{
tf(ta){
返回一个+“def”;
}
}
为什么它会给我一个编译时错误“错误:不兼容类型”?为什么我不能使用像字符串一样扩展字符串的东西?应用于
字符串的+
运算符,其他任何东西都是字符串
串联运算符,并生成字符串
您的返回类型是T
,而不是String
T
可以(不会,但理论上可以)是String
的任何子类型。因此,不允许编译此文件
同样地
class Foo {}
class B<T extends Foo> {
T f(T a) {
return new Foo();
}
}
class Bar extends Foo {}
class Foo{}
B类{
tf(ta){
返回新的Foo();
}
}
类栏扩展了Foo{}
但是
newb().f(newbar());
返回类型应为Bar
,但将返回Foo
。这没有意义,因此无法编译。应用于字符串的+
运算符,其他任何操作都是字符串
串联运算符,并生成字符串
您的返回类型是T
,而不是String
T
可以(不会,但理论上可以)是String
的任何子类型。因此,不允许编译此文件
同样地
class Foo {}
class B<T extends Foo> {
T f(T a) {
return new Foo();
}
}
class Bar extends Foo {}
class Foo{}
B类{
tf(ta){
返回新的Foo();
}
}
类栏扩展了Foo{}
但是
newb().f(newbar());
返回类型应为Bar
,但将返回Foo
。这没有意义,因此无法编译。应用于字符串的+
运算符,其他任何操作都是字符串
串联运算符,并生成字符串
您的返回类型是T
,而不是String
T
可以(不会,但理论上可以)是String
的任何子类型。因此,不允许编译此文件
同样地
class Foo {}
class B<T extends Foo> {
T f(T a) {
return new Foo();
}
}
class Bar extends Foo {}
class Foo{}
B类{
tf(ta){
返回新的Foo();
}
}
类栏扩展了Foo{}
但是
newb().f(newbar());
返回类型应为Bar
,但将返回Foo
。这没有意义,因此无法编译。应用于字符串的+
运算符,其他任何操作都是字符串
串联运算符,并生成字符串
您的返回类型是T
,而不是String
T
可以(不会,但理论上可以)是String
的任何子类型。因此,不允许编译此文件
同样地
class Foo {}
class B<T extends Foo> {
T f(T a) {
return new Foo();
}
}
class Bar extends Foo {}
class Foo{}
B类{
tf(ta){
返回新的Foo();
}
}
类栏扩展了Foo{}
但是
newb().f(newbar());
返回类型应为Bar
,但将返回Foo
。这没有意义,因此无法编译。String
是final
,没有任何东西可以扩展它,因此泛型类的定义不是很有用。我很惊讶
是编译的。字符串
是最终的
,没有任何东西可以扩展它,所以泛型类的定义并没有真正的用处。我很惊讶
是编译的。字符串
是最终的
,没有任何东西可以扩展它,所以泛型类的定义并没有真正的用处。我很惊讶
是编译的。字符串
是最终的
,没有任何东西可以扩展它,所以泛型类的定义并没有真正的用处。我对编译的
感到惊讶。String
是最终的;我甚至不确定编译器是否会允许您编写T扩展字符串
。您也不能扩展整数等。它们是神圣的。但仅使用“return a;”就可以完美编译。为了清楚起见,
是毫无意义的。这实际上转化为String
(因为@LouisWasserman提到的原因)。这会使该类的泛型组件变为惰性组件,因此您不妨先为字符串编写它。这也会解决你(其他)的问题。这是一个考试的例子,所以是一个理论上的例子。但我仍然不认为编译器允许扩展字符串有任何意义。String
是最终的;我甚至不确定编译器是否会允许您编写T扩展字符串
。您也不能扩展整数等。它们是神圣的。但仅使用“return a;”就可以完美编译。为了清楚起见,
是毫无意义的。这实际上转化为String
(因为@LouisWasserman提到的原因)。这会使该类的泛型组件变为惰性组件,因此您不妨先为字符串编写它。这也会解决你(其他)的问题。这是一个考试的例子,所以是一个理论上的例子。但我仍然不认为编译器允许扩展字符串有任何意义。String
是最终的;我甚至不确定编译器是否会允许您编写T扩展字符串
。您也不能扩展整数等。它们是神圣的。但仅使用“return a;”就可以完美编译。为了清楚起见,
是毫无意义的。这实际上转化为String
(因为@LouisWasserman提到的原因)。这会使该类的泛型组件变为惰性组件,因此您不妨先为字符串编写它。这也会解决你(其他)的问题。这是一个考试的例子,所以是一个理论上的例子。但我仍然不认为编译器允许扩展字符串有任何意义。String
是最终的;我甚至不确定编译器是否会允许您编写T扩展字符串
。您也不能扩展整数等。它们是神圣的。但仅使用“return a;”就可以完美编译。为了清楚起见,
是毫无意义的。这本质上转化为Str