我尝试创建实现另一个通用接口的接口:
public interface MinMax implements Comparable<T> {
}
但在T
我收到错误无法解析符号T
。
所以我尝试了这种语法:
public interface MinMax <T extends Comparable> {
}
它有效我上面的语法没有任何错误。
我无法理解为什么我应该使用扩展而不是实现,而可比较的是接口。
答案 0 :(得分:3)
在您的第一个代码段中,您尝试使用泛型类型变量T
,而无需先声明它。您也不能说接口implements
另一个接口(只有一个类可以实现接口)。相反,接口可以扩展另一个接口。
您可以使用以下方式声明:
public interface MinMax<T> extends Comparable<T> {
}
这意味着接口MinMax
有一个名为T
的泛型类型参数,接口扩展了Comparable<T>
接口(这意味着任何MinMax
接口的实现都必须实现public int compareTo(T o);
方法。
你的第二个片段
public interface MinMax <T extends Comparable> {
}
有不同的含义。这里MinMax
也有一个名为T
的泛型类型参数,但您需要T
实现Comparable
(请注意,当在泛型类型绑定中使用时,关键字{{1}可以表示扩展类或实现接口),这意味着extends
本身不会扩展MinMax
接口。
最后一件事,第二个片段更有意义
Comparable
因为您不想使用原始public interface MinMax <T extends Comparable<T>> {
}
接口。您想要指定与Comparable
进行比较的对象类型。
答案 1 :(得分:2)
简单:因为T
必须来自某处!
你需要:
public interface MinMax<T> extends Comparable<T> {
}
例如,。真正的答案是:不要去试错。你必须学习这个概念。例如,开始阅读here。或者,如果您是一位经验丰富的程序员,并且想要变硬 - 请转there。
但是,不要认为反复试验是理解全新概念的有效策略。
然后你也会理解其中的区别:
public interface MinMax<T> implements Comparable<T> {
稍后允许任何类型与此界面一起使用。而
public interface MinMax <T extends Comparable>
说MinMax允许任何实现Comparable接口的类型T.
当然 - 评论完全正确:接口扩展,他们没有实施。