所以我有2个版本的相同的方法。带接口的泛型方法的边界类型参数?
版本1:
public static <T> int countGreaterThan(T[] anArray, T elem)
{
int count = 0;
for (T e : anArray)
{
if (e > elem)
count++;
}
return count;
}
版本2:
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem)
{
int count = 0;
for (T e : anArray)
{
if (e.compareTo(elem) > 0)
count++;
}
return count;
}
Eclipse的抱怨版本1因为比较原语的情况下,>操作者只能用其中有意义对我来说。
因此,为了解决这个问题,互联网告诉我使用由Comparable接口定界的类型参数。这是我开始失去对正在发生的事情的...
根据我对接口的基本理解,实现接口的类必须为接口中声明的每个方法提供一个方法体。
因此,为什么不版本2必须是这样的?
public int compareTo(T o)
{
//stuff for method body
}
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem)
{
int count = 0;
for (T e : anArray)
{
if (e.compareTo(elem) > 0)
count++;
}
return count;
}
^我得到的,这不是正确的语法,但我只是做它来说明,以我的问题是,为什么我没有写一个方法体在可比接口中的方法这个情况。
请尽量保持外行的解释。我一直在教自己这个东西,所以简单的解释帮助我更深入地研究主题的技术方面。
对不起,让我澄清。
下面是可比接口的代码:
public interface Comparable<T> {
public int compareTo(T o);
}
没有为任何的compareTo方法体(),因为它是一个接口。为什么我不必为compareTO()手动编写一个正文,这样我就可以在我的countGreaterThan()方法中使用该接口了?
是因为该接口是Java Collections Framework的一部分(如果这就是为什么,请解释是如何工作的)
这里有不同的情况,我创造我自己的接口:
public interface Dance { //an interface
public void boogie(int count);
}
,并在为了在不同的类中实现这个接口,我需要在这些类的方法体中为Dance接口中的方法编写方法体。
public class theMoonwalk implements Dance {
public void boogie(int count) {
System.out.println("Slide " + count + " times!");
}
public void mJ() {
System.out.println("Michael Jackson did this dance!");
}
public class theHustle implements Dance {
public void boogie(int steps) {
System.out.println("Step " + steps + " times!");
}
}
public class theJitterBug implements Dance {
public void boogie(int twists) {
System.out.println("Twist " + twists + " times!");
}
}
我为什么不都写的compareTo()方法体(因为方法体不包括在该的compareTo可比接口())?
你问你为什么不必写'public int compareTo(T o)'方法吗? – Oli
我不明白。包含'countGreaterThan'方法的类不必实现'Comparable' ...你能澄清你在这里问的是什么吗? – aioobe
@Patrick泛型类型T必须实现'compareTo'方法,而不是包含泛型方法的类。 –