【发布时间】:2022-01-25 08:36:56
【问题描述】:
我正在努力让接口实现在另一个类中被继承:
我有一个需要实现 compareTo 的通用类。该类称为 GenericList 并实现为:
public class GenericList<T extends Comparable<T>> {
private T[] items;
private int count;
public GenericList() {
items = (T[]) new Comparable[10];
count = 0;
}
}
我有一个实现 compareTo 的 User 类:
public class User implements Comparable<User> {
private String email;
public User(String email) {
this.email = email;
}
@Override
public int compareTo(User o) {
return (email.compareTo(o.email));
}
}
创建用户的通用列表没有问题:
var users = new GenericList<User>();
如果我创建一个扩展 User 的类并尝试创建该类型的通用列表,则会收到错误消息。我创建了一个名为 Instructor 的类:
public class Instructor extends User{
public Instructor(String email){
super(email);
}
}
如果我使用该类创建一个通用列表:
var instructors = new GenericList<Instructor>();
我收到一个错误:
Type parameter 'com.martin.Instructor' is not within its bound; should implement 'java.lang.Comparable<com.martin.Instructor>'
不应该使用继承的 compareTo 方法吗?
我尝试了很多不同的方法,但我无法让 GenericList 使用这样的继承类。
谢谢
【问题讨论】:
-
讲师继承
compareTo(User)。接口需要compareTo(Instructor)。 -
澄清一下,
Instructor需要实现int compareTo(Instructor),即使它只是委托给它的超类。 -
你可以尝试声明
public class GenericList<T extends Comparable<? super T>> { private T[] items; -
另外,在 GenericList 构造函数中的强制类型现在可以擦除类型,但如果我们得到具体化的泛型,就会中断。
-
Martin... 从逻辑上考虑前两个 cmets。
Instructor可以有其他字段,当您仅比较通用User时,这些字段不会被考虑在内。这就是为什么Instructor必须有一个compareTo()方法。
标签: java