泛型类型有问题 - Java
Having problems with generic types - Java
我有三个 Class 都使用泛型类型:
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>
的对象时,它工作得很好。但是现在我创建了一个ClassZoo
。我希望 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
类型变量的范围:
public class Sequence<T extends Comparable<? super T>>
或者,定义不带类型变量的 Zoo
:
public class Zoo extends Sequence<Animal>
我有三个 Class 都使用泛型类型:
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>
的对象时,它工作得很好。但是现在我创建了一个ClassZoo
。我希望 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
类型变量的范围:
public class Sequence<T extends Comparable<? super T>>
或者,定义不带类型变量的 Zoo
:
public class Zoo extends Sequence<Animal>