界面奇怪的泛型行为

ins*_*ity 0 java generics extends interface implements

我想创建一个泛型类,它接受一些可比较的泛型类型的元素.所以我这样做:

public class Foo<T extends Comparable<T>>

在课堂上Foo我有类似的东西:

public void bar(T t)

我确信我可以写这样的代码:t.compareTo(v).

问题1:为什么在使用泛型时我们extendsimplements使用接口?Comparable不是一个阶级.

\\

现在假设我想创建另一个与上面类似的类也实现该bar方法.我想创建这个界面:

public interface Face<T extends Comparable<T>> {
    public void bar(T t);
}
Run Code Online (Sandbox Code Playgroud)

然后我改变类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).

pob*_*key 5

  1. 不能代表Java泛型的设计者,但可能他们这样做是为了简化语言.一个点X extends Y的约束是,我们要指定X可以分配给输入Y-在它的非物质是否结束Y是一个接口或类,所以让你使用implementsextends根据是否Y是一个或另一个似乎是一个麻烦.
  2. 尝试:public class Foo<T extends Comparable<T>> implements Face<T>- Face是一个带有类型参数的接口,因此在扩展接口时需要填写该类型参数.