2012-08-09 70 views
2
class main{ 
public static void main(String[] args){ 
    int[] array = new int[3]; 
    array[0]=3; 
    array[1]=2; 
    array[2]=1; 
    System.out.println(<Integer>countGreaterThan(array,1)); 
} 
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; 
} 
} 

我在Java Documentation得到這個檢驗。當我編寫擴展Comparable時,如何告訴編譯器什麼是類型? 我想我應該在<T extends Comparable<T>>實例化T,但如何?Java中的泛型:我如何使這個例子工作?

+1

你不能使用基本類型如int,布爾,焦炭等仿製藥....你必須使用對象包裝類(如人們已經提到)。 – Matt 2012-08-09 12:23:02

回答

7

只要將int更改爲Integer並在您的打印語句中刪除那個醜陋的<Integer>即可。

Integer[] array = new Integer[3]; 
array[0] = 3; 
array[1] = 2; 
array[2] = 1; 
System.out.println(countGreaterThan(array, 1)); 
0
class main { 
    public static void main(String[] args){ 
    Integer[] array = new Integer[3]; 
    array[0]=3; 
    array[1]=2; 
    array[2]=1; 
    System.out.println(countGreaterThan(array,1)); 
} 

    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; 
    } 
} 
0
Integer[] array = new Integer[3]; 
    array[0]=3; 
    array[1]=2; 
    array[2]=1; 
    System.out.println(countGreaterThan(array,1)); 

這是你在找什麼?

2

我會安排這使您可以使用可變參數

static <T extends Comparable<T>> int countGreaterThan(T elem, T... anArray) { 
    int count = 0; 
    for (T e : anArray) 
     if (e.compareTo(elem) > 0) 
      ++count; 
    return count; 
    } 
} 

System.out.println(countGreaterThan(1, 3,2,1)); 
+0

+1可變參數。我傾向於使用他們自己很多。 – maba 2012-08-09 12:26:09

+0

@maba它也隱藏了不得不使用'Integer'而不是'int'的醜陋 – 2012-08-09 12:36:33

+0

是的,那太好了。我在另一個問題([這裏](http://stackoverflow.com/questions/11244080/optimizing-code-for-more-clearness-and-efficiency/11245449#11245449))有另一個優雅(IMO)解決方案),但它didn 't得到太多的關注... – maba 2012-08-09 12:44:43