我有三个类,它们都使用泛型类型:
public class Animal implements Comparable<Animal>
public class Sequence<T extends Comparable<T>> implements Iterable<T>
public class Zoo<T extends Animal> extends Sequence<T>
所以我的思考过程是这样的:Animal
是 Comparable<Animal>
的子类型。 Sequence
中的通用子类型 T也是 Comparable<Animal>
的子类型。因此,当我创建 Sequence<Animal>
类型的对象时,它工作完美。但现在我创建了一个类 Zoo
。我要Zoo
与 Sequence
相同,除了泛型类型 T 应仅限于 Animal(并且只能采用 Animal 或 Animal 的一种固定子类型)。所以我做Zoo
延长Sequence<T>
,T 延伸Animal
。我认为它应该有效,因为 Animal
是 Comparable
的子类型,但是编译器给了我一个错误:
T is not within its bounds; should implement Comparable<T>
但是 T 已经实现了 Comparable,因为它是 Animal 的子类型,不是吗? 有人可以解释一下发生了什么,或者我如何实现我想要做的事情吗?
最佳答案
更改Sequence
类型变量的绑定(bind):
public class Sequence<T extends Comparable<? super T>>
或者,定义不带类型变量的 Zoo
:
public class Zoo extends Sequence<Animal>
关于java - 泛型类型出现问题 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58937077/