如何在Java中的类及其子类中使用泛型?

时间:2019-03-29 09:32:49

标签: java generics inheritance

我正在用泛型类编写这个简单的Java程序。但是,我在测试程序时遇到问题: “学生”类扩展了“人”类。创建ArrayBox(我的通用类)时,创建ArrayBox时不能使用Student类

我看到错误: “ java:类型参数com.company.Student不在类型变量T的范围内”

班级学生扩展班级人员。我试着使它实现Comparable,但是出现一个错误,告诉我它不能继承不同的类型(扩展人并实现C)

我试图使它扩展Comparable,但它似乎也不起作用。

这是向我显示错误的部分:

ArrayBox<Student> bst = new ArrayBox<>(1);

这是ArrayBox声明:

public class ArrayBox<T extends Comparable<T>> {

人员类别声明:

public class Person implements Comparable<Person>{

学生课堂声明:

public class Student extends Person{

我已经在网上搜索了,但是我仍然不知道该怎么做。 这个问题可以轻松解决(甚至避免) 通过使用:

ArrayBox<Person> bst = new ArrayBox<>(1);

代替:

ArrayBox<Student> bst = new ArrayBox<>(1);

但是我真的需要第二种形式的这项工作。为了使此代码有效,应如何声明“学生”类?

对不起,如果我的问题似乎很混乱,因为这是我第一次在这里问。

2 个答案:

答案 0 :(得分:1)

一种可能的方法是将ArrayBox签名更改为类似以下内容:

public class ArrayBox<T extends Comparable<? super T>>

以上内容将使ArrayBox对T的扩展名开放。

答案 1 :(得分:0)

原因是Student扩展了Person使其成为Comparable<Person>,而不是Comparable<Student>所期望的ArrayBox

让它implement Comparable<Student>就足够了。