0

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

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来实现Facepublic class Foo<T extends Comparable<T>> implements Face)。

问题2:执行此操作时出现以下编译错误:

Foo 类型的方法 bar(T) 必须覆盖或实现超类型方法

为什么是这样?

当我告诉 Eclipse 时,add the unimplemented methods我得到: public void bar(Comparable t)而不是... bar(T t).

4

2 回答 2

5
  1. 不能代表 Java 泛型的设计者,但大概他们这样做是为了简化语言。约束的重点X extends Y是我们要指定X可分配给类型Y的内容 - 最后,无论Y是接口还是类都无关紧要,因此让您使用implementsextends基于Y一个或另一个似乎很麻烦。
  2. Try: public class Foo<T extends Comparable<T>> implements Face<T>-Face是一个带类型参数的接口,所以在扩展接口的时候需要填写那个类型参数。
于 2013-11-02T01:30:12.443 回答
1

请重新格式化您的问题。但是,如果我在那里理解了什么,请执行以下操作:

// Face<T>, not just Face
public class Foo<T extends Comparable<T>> implements Face<T> {
}
于 2013-11-02T01:33:58.263 回答