我想在Java 6中实现这个:
abstract class CurrClass{
public <T extends CurrClass> T setField (String str) {
return this;
}
}
编译器报错:错误:类型不匹配,无法将 CurrClass 转换为 T。
添加强制类型转换可以解决问题,但会产生 警告:"return (T) this;"
有没有更简洁的语法来解决这个问题?为什么需要进行强制类型转换?
我想在Java 6中实现这个:
abstract class CurrClass{
public <T extends CurrClass> T setField (String str) {
return this;
}
}
编译器报错:错误:类型不匹配,无法将 CurrClass 转换为 T。
添加强制类型转换可以解决问题,但会产生 警告:"return (T) this;"
有没有更简洁的语法来解决这个问题?为什么需要进行强制类型转换?
class A extends CurrClass {}
class B extends CurrClass {}
...
A myObject = new B().setField("stringhere");
ClassCastException
。因此,通常我们只返回比签名要求更严格的类型。为什么需要转换类型?
因为 this
是当前类(CurrClass),而 setField() 方法需要返回其扩展类。
Super super = new Sub(); //it's fine, no casting is needed
Sub sub = new Super(); //error!! -->what you do
有更简洁的语法来做这件事吗?
如果你想要 SubClass s = super.setField("");
,你需要进行强制转换。
但是我们经常使用 Super s = sub.setField("");
,因为多态性可以为我们带来便利。