我正在用泛型类编写这个简单的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);
但是我真的需要第二种形式的这项工作。为了使此代码有效,应如何声明“学生”类?
对不起,如果我的问题似乎很混乱,因为这是我第一次在这里问。
答案 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>
就足够了。