加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 通用方法无法正确识别类型

发布时间:2020-12-15 04:21:07 所属栏目:Java 来源:网络整理
导读:我有一个类,其成员定义为: MapClass? extends Model,List? extends Model mockStore; 在这堂课中,我有一个方法: protected T extends Model void insertMockStore(T obj){ mockStore.get(obj.getClass()).add(obj);} 但是这种方法会产生编译错误: 类型Lis
我有一个类,其成员定义为:

Map<Class<? extends Model>,List<? extends Model>> mockStore;

在这堂课中,我有一个方法:

protected <T extends Model> void insertMockStore(T obj)
{
    mockStore.get(obj.getClass()).add(obj);
}

但是这种方法会产生编译错误:

类型List中的方法add(capture#8-of?extends Model)不适用于参数(T)

我不明白这个错误,因为T被定义为扩展模型,为什么它会说T不适用?

解决方法

您的成员声明表明mockStore的值将是包含Model的未指定子类*的列表.

insertMockStore方法的做法类似,但没有任何保证传递给insertMockStore的Model的子类与列表相同.

你应该做的是宣布mockStore像这样:

Map<Class<? extends Model>,List<Model>> mockStore;

一个容易记住的经验法则是“PECS规则”:生产者扩展,消费者超级.这意味着如果你的成员有一个带有类型参数Foo的集合,所有生成器类型方法(插入到你的集合中的那些)将需要T extends Foo和所有消费者类型方法(那些从集合中返回值的方法)应该有T super Foo .

*与泛型一样,在“子类”中我们包括类本身.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读