2015-11-19 67 views
2

我在初始化數組並返回它時有問題。該方法假設返回一個通用數組的常見項目,但我不能初始化數組「a」或返回它。任何建議?在Java中返回泛型數組

public static <T> T[] commonItems(T[] arr1, T[] arr2) 
{ 
    T[] a; 
    int pos = 0; 
    for(int i = 0; i < arr1.length; i++) 
    { 
     for(int j = 0; j < arr2.length; j++) 
     { 
      if(arr1[i].equals(arr2[j])) 
      { 
       a[pos] = arr1[i]; 
       pos++; 
      } 
     } 
    } 
    return a; 
} 
+0

你可能會需要通過類類型:http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java –

+0

有看看這裏也許這有助於http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java?rq=1 –

+0

然後,你幫我很多 –

回答

2

你事先不知道的元素數量是常見的,所以在第一步最好是收集在一個列表中的常用物品:

public static <T> T[] commonItems(T[] arr1, T[] arr2) 
{ 
    ArrayList<T> list = new ArrayList<>(); 
    for (int i = 0; i < arr1.length; i++) 
    { 
      for(int j = 0; j < arr2.length; j++) 
      { 
       if (arr1[i].equals(arr2[j])) 
        list.add(arr1[i]); 
      } 
    } 

然後您可以創建結果陣列,使用Class.getComponentType

 T[] result = (T[])Array.newInstance(arr1.getClass().getComponentType(), list.size()); 
    list.toArray(result); 
    return result; 
} 
+0

謝謝你的建議和建議,它真的幫助。 –

+0

@newacct不清楚你的意思。你如何調用'commonItems'傳遞一個String []和Integer []'數組? – wero

+0

@newacct你可以調用'commonItem(stringarray,integerarray);'它會編譯('T'是'Object&Comparable&Serializable')。它不會完全失敗,但返回一個空字符串數組。但是如果你寫'String [] s = commonItem(stringarray,integerarray)'它不會編譯:所以我不完全明白你的觀點。 – wero