java - 泛型类型出现问题 - Java

标签 java class generics subclass

我有三个类,它们都使用泛型类型:

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>

所以我的思考过程是这样的:AnimalComparable<Animal> 的子类型。 Sequence 中的通用子类型 T也是 Comparable<Animal> 的子类型。因此,当我创建 Sequence<Animal> 类型的对象时,它工作完美。但现在我创建了一个类 Zoo 。我要ZooSequence 相同,除了泛型类型 T 应仅限于 Animal(并且只能采用 Animal 或 Animal 的一种固定子类型)。所以我做Zoo延长Sequence<T> ,T 延伸Animal 。我认为它应该有效,因为 AnimalComparable 的子类型,但是编译器给了我一个错误:

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/

相关文章:

php - 面向对象的 PHP 和 MySQL

java.lang.reflect.InitationTargetException?

java - 如何在大型项目中安排/管理不同功能的方法

java - 添加静态方法以促进更清洁的单元测试 - 好的做法?

javascript - 为什么要使用构造函数?

typescript - 如何将 JSDoc 与通用 typescript 一起使用?

java - 如何使用多个 tar 文件创建单个 .tar 文件

excel - Vba 错误处理和类 (Excel)

c# - 在树层次结构中具有深度限制的通用深度克隆

typescript - 折叠一个有区别的联合——从联合派生出一个包含所有可能的键值组合的伞型