我想创建一个泛型类,它接受一些可比较的泛型类型的元素。所以我这样做:
public class Foo<T extends Comparable<T>>
在课堂内Foo
我有类似的东西:
public void bar(T t)
我确信我可以编写这样的代码:t.compareTo(v)
。
问题1:为什么在使用泛型时,我们为接口设置了extends
而不是implements
? Comparable
不是一个班级。
\\
现在假设我想创建另一个类似于上面也在实现的类
bar
方法。我想创建这个界面:
public interface Face<T extends Comparable<T>> {
public void bar(T t);
}
然后我更改了课程Foo
以实施Face
(public class Foo<T extends Comparable<T>> implements Face
)。
问题2:执行此操作时,我收到以下编译错误:
Foo类型的方法栏(T)必须覆盖或实现超类型方法。
为什么会这样?
当我告诉Eclipse add the unimplemented methods
时,我得到:
public void bar(Comparable t)
代替... bar(T t)
。
答案 0 :(得分:5)
X extends Y
约束的要点是我们要指定X
可分配给类型Y
- 最后,Y
是接口还是类是无关紧要的,因此,根据implements
是一个还是另一个看似麻烦,让您使用extends
或Y
。public class Foo<T extends Comparable<T>> implements Face<T>
- Face是一个带有类型参数的接口,因此在扩展界面时需要填写该类型参数。答案 1 :(得分:1)
请稍微重新格式化您的问题。但如果我理解了那些,那就这样做:
// Face<T>, not just Face
public class Foo<T extends Comparable<T>> implements Face<T> {
}