2015-12-30 45 views
1

我正在學習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是不適用的參數(整數[],整數)」。我怎麼能改變我的代碼?

謝謝。

+0

爲什麼你需要在你的類中定義的Comparable接口?在java API中已經有一個 – sidgate

+0

除了你的實際問題,而不是新的整數(5),使用Integer.valueOf(5)。 http://stackoverflow.com/questions/2974561/new-integer-vs-valueof – atom

回答

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

你的方法countGreaterThan是擴展自己的Comparable接口類型。 Integer不但擴展了java.lang.Comparable接口的構建。所以刪除你的界面,它可以工作,或使用它自己的類來擴展你的界面。