gpt4 book ai didi

java - 为什么我们不能传递泛型类型 T 而不是 ?在泛型中

转载 作者:行者123 更新时间:2023-12-01 20:27:11 26 4
gpt4 key购买 nike

我有一个 Animal 类和一个扩展 Animal 的 Cat 类(猫是动物)我定义了一个通用类:

public class Employee<T extends Animal> {
T obj;
Employee(T o){
obj=o;
}
String getName(Employee<T> a){
return "ok";
}
}

在测试类中,如果我写这个,它会给我以下错误:

Employee<Cat> cat = new Employee<Cat>(null);
Employee<Animal> animal = new Employee<Animal>(null);
animal.getName(cat);

但是如果我给 getName 方法通过问号,它就可以工作,我认为 Cat 是一个 Animal(Cat 类扩展 Animal)。知道为什么我需要通过吗?而不是 T ?

最佳答案

如果你有方法getName(Employee<T> a)那么这个方法只接受Employee<T> ,在 animal.getName(a) 的情况下意味着它必须是 Employee<Animal> (因为 animalEmployee<Animal>

如果你还想接受泛型类型的子类,你必须说

String getName(Employee<? extends T> a)

如果你还想接受泛型类型的父类(super class),你必须说

String getName(Employee<? super T> a)

如果您实际上并不关心其他动物的通用类型,您可以说

String getName(Employee<?> a)

这四种情况中哪一种合适取决于该方法实际需要做什么(以及两个对象及其其他方法如何使用泛型类型)。

关于java - 为什么我们不能传递泛型类型 T 而不是 ?在泛型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703474/

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