[英]Why cannot assign a subtype value to a generic type?
谁能解释一下:
class Test<T extends BaseDao>{
void someMethod(){
T inst = new Dao(); // required type T provided Dao
T inst2 = new BaseDao(); // required type T provided BaseDao
}
}
class Dao extends BaseDao{}
我们有 T 类型作为 BaseDao 的子类型。 为什么不能将 Dao 或 BaseDao 类型分配给 T 类型?
T 可以是 Dao 的实例,但您不能像这样将 Dao 的新实例分配给泛型类型 T,因为 T 可以引用任何扩展 BaseDao 的类。
如果你需要一些特定的 Dao 实例,你应该这样做
Dao inst = new Dao()
相反,如果您确实想要一个特定的实例,但又不想知道特定的类,则可以将 inst1 和 inst2 作为参数传递,或传递一个字符串并按名称创建实例,或许多其他可能性。
简而言之, T inst = new Dao();
没有意义,因为它与泛型的目的相冲突。
想象
Test<MySpecialDao> specialDao = new Test<>();
现在,对于像specialDao.someMethod()
这样的调用,
void someMethod(){
T inst = new Dao(); // required type T, provided Dao
T inst2 = new BaseDao(); // required type T, provided BaseDao
}
有效地变成
void someMethod(){
MySpecialDao inst = new Dao(); // required type MySpecialDao, provided Dao
MySpecialDao inst2 = new BaseDao(); // required type MySpecialDao, provided BaseDao
}
当然, Dao
和BaseDao
都不是MySpecialDao
子类型,可能是超类型。
我会改为
void someMethod(){
Dao inst = new Dao();
BaseDao inst2 = new BaseDao();
}
希望此更改不会破坏您的预期逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.