为什么不能将子类型值分配给泛型类型?

康斯坦丁

任何人都可以解释:

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类型?

拉尔夫·克莱伯霍夫

想像

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
}

当然,DaoBaseDao都不是的子类型MySpecialDao,可能不是超类型。

我会改成

void someMethod(){
    Dao inst = new Dao(); 
    BaseDao inst2 = new BaseDao();
}

希望此更改不会破坏您的预期逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能将打字稿泛型类型分配给该类型的联合?

为什么子类型不能分配给 Dart 中的 <T extends baseclass> 泛型

为什么子类类型不能分配给类型'this'?

不能将泛型类型的查找类型分配给“任何”

不能将泛型Java类型的类分配给其类类型以泛型超级类型为上限的变量

为什么不能将类型的值分配给实现带有接收者类型指针的方法的接口?

为什么不能将类型SFC <AnchorProps>分配给类型SFC <{}>?

Flutter with Translator:为什么不能将参数类型“Future<Translation>”分配给参数类型“String”?

为什么不能将包含通用类型的通用类型分配给通配符类型的通用类型的类

TS:为什么可以将无效类型分配给泛型类型变量?

为什么不能将方法引用直接分配给Object类型的变量?

为什么不能将Nothing分配给Unit类型的变量?

为什么“数字”类型不能分配给“ T”类型?

不能将类型“ number”分配给类型“ ReadonlyArray <{}>”

错误:不能将类型为“ Future”的值分配给类型为“ SocketIO”的变量

Sequelize Typescript:不能将类型'FavoriteEntity []'分配给类型'FavoriteEntity | |。空值'

Flutter - 不能将“List<Map<String, Object>>”类型的值分配给“List<Classes>”类型的变量

Dart 不能将“num”类型的值分配给“int”类型的变量

不能将“Set<String?>”类型的值分配给“Map<String, String>”类型的变量

打字稿抱怨类型永远不能分配给简单泛型类中的类型 K

TypeScript泛型类型“ {result:true}”不能分配给类型“ T”

为什么我们不能将 lambda 表达式直接分配给 Object 类型的引用变量?

为什么我不能在Kotlin中将空值类型分配给Any?

不能将Nil分配给AVCaptureDeviceInput类型

为什么不能将lambda分配给无类型谓词引用?但是可以为其分配初始化的类型谓词引用吗?

分配给泛型类型运行时getClss()方法错误的Java原始类型值

为什么不能将匿名方法分配给var?

为什么不能将项目分配给对象的常量?

为什么不能将背景颜色分配给视图