如何调用这个通用函数?

时间:2014-06-28 17:35:39

标签: java generics bounded-wildcard

我尝试了很多方法来调用countGreaterThan()函数(described here),但我无法让它工作。我知道我需要使用Integer个实例而不是原语。这就是我尝试过的:

MainClass.java

public class MainClass {

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 static void main(String[] args){
    Integer[] myArray = {0,1,2,3,4};
    Integer myInt = new Integer(2);
    int result = countGreaterThan(myArray,myInt);
            System.out.println(result);
}
}

这是Comparable.java接口

public interface Comparable<T> {
   public int compareTo(T o);
}

这就是我得到的错误 -

  

绑定不匹配:类型的泛型方法countGreatherThan(T [],T)   MainClass不适用于参数(Integer [],Integer)。该   推断类型Integer不是有界的有效替代   参数&gt;

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,看起来你正在呼叫countGreaterThan()!你没做的就是打印结果或保存结果。

countGreaterThan(myArray,myInt);

应该是

int result = countGreaterThan(myArray, myInt);
System.out.println(result);

答案 1 :(得分:1)

我不得不怀疑你是否已经创建了自己的Comparable.java界面并且正在使用它。如果是这样,您就会看到错误,因为Integer不使用您的界面,而是使用核心Java的一部分。如果是这样,请删除Comparable.java类,删除它,然后使用属于核心Java的类。无需导入,因为它是java.lang包的一部分,这个包的类默认都是自动导入的。