对另一个接口中通用接口实现的误解

时间:2017-07-12 09:17:15

标签: java generics

我尝试创建实现另一个通用接口的接口:

public interface MinMax implements Comparable<T> {
}

但在T我收到错误无法解析符号T

所以我尝试了这种语法:

public interface MinMax <T extends Comparable> {    
}

它有效我上面的语法没有任何错误。

我无法理解为什么我应该使用扩展而不是实现,而可比较的是接口。

2 个答案:

答案 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.

当然 - 评论完全正确:接口扩展,他们没有实施