gpt4 book ai didi

java - 通用类型分配表示不兼容的类型以进行更严格的分配

转载 作者:搜寻专家 更新时间:2023-10-31 19:45:30 25 4
gpt4 key购买 nike

我有一个以下类型的变量

Pair<String, Class<?>> test;

我正在尝试这样创建它:

Class<? extends Animal> animal = Tiger.class;
test = Pair.create("tiger", animal);

代码给了我“不兼容的类型”(在创建与动物配对时)。尽管变量测试定义允许任何类型的类,并且动物定义了动物的任何子类的边界,这比原来的更严格。那么这个作业不应该工作吗?

最佳答案

TigerAnimal 的子类型,但是 Class<Tiger> 不是 Class<Animal> 的子类型.两者的 parent Class<Tiger>Class<Animal>Class<?> .

同样,Pair<String, Class<? extends Animal>>不是 Pair<String, Class<?>> 的子类型, 它们实际上是不同的对象,即使 Class<? extends Animal>>Class<?> 的子类型.

为了更容易理解,从集合的角度考虑:如果你有一个 Pair<String, List<?>> , 然后你分配一个 Pair<String, List<? extends Number>>对它;然后你可以添加 String到列表中。 http://ideone.com/dcXnWs

在 Java8 中,您的代码有效 http://ideone.com/AkK7Zv ;老实说,我不确定编译器还做了什么(仍然需要研究新特性)。无论如何,如您所见,以下示例的编译器错误非常具有解释性:

关于java - 通用类型分配表示不兼容的类型以进行更严格的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com