需要帮助通用比较方法

时间:2015-12-30 06:51:09

标签: java generics

我正在学习Java中的泛型方法。我想计算一个数组的元素数量大于给定的数字。这是我的代码:

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

    public static <T extends Comparable<T>> int countGreaterThan(T[] list, T element){
        int count = 0;
        for(T e:list){
            if (e.compareTo(element)>0){
                ++count;
            }
        }
        return count;
    }

    public static void main(String[] args){
        Integer[] intArray = {5 ,10,8,1,0,3};
        Integer u = new Integer(5);
        System.out.print("Number of elements are greater than "+ u.toString()+" is:");
        System.out.print(countGreaterThan(intArray,u));
    }
}

我收到错误“countGreaterThan不适用于参数(Integer [],Integer)”。我怎么能改变我的代码?

感谢。

2 个答案:

答案 0 :(得分:1)

您不应该自己编写Comparable界面,它是java.lang包中的默认Java界面(您甚至不必手动导入)。删除类中的接口声明,它将起作用:

public class GenericMethodExample {

    public static <T extends Comparable<T>> int countGreaterThan(T[] list, T element){
        int count = 0;
        for(T e:list){
            if (e.compareTo(element)>0){
                ++count;
            }
        }
        return count;
    }

    public static void main(String[] args){
        Integer[] intArray = {5 ,10,8,1,0,3};
        Integer u = new Integer(5);
        System.out.print("Number of elements are greater than "+ u.toString()+" is:");
        System.out.print(countGreaterThan(intArray,u));
    }
}

答案 1 :(得分:1)

您的方法countGreaterThan适用于扩展您自己的Comparable界面的类型。 Integer不会扩展java.lang.Comparable界面中的内置版本。因此,删除您的界面,它可以工作或使用扩展您的界面的自己的类。