2015-09-04 33 views
-3
public void expand(???, int number) { 

    array = java.util.Arrays.copyOf(array, array.length + number); 

} 

在「???」中,我想接受任何類型的數組。解決方案在於泛型類型嗎?如何請求任何數組作爲參數?

+0

取決於您想要做什麼。數組通常不能很好地處理泛型,因爲你不能分配一個通用數組。然而,你可以在'Array'上使用一些靜態方法來實例化這樣一個數組' – Dici

+0

'Object [] array'? –

+0

該方法的唯一目的是使用copyOf獲取數組並增加其長度。我之前使用過copyOf和由我自己製作的對象組成的數組,因此我知道copyOf將能夠接受任何數組,無論類型如何。我希望這種擴展方法具有相同的靈活性。 – SusuKacangSoya

回答

0
Integer[] array = {1,2,3}; 
array = expand(array, 10); 
System.out.println(array.length); 

public <T> T[] expand(T[] array, int number) { 
    array = java.util.Arrays.copyOf(array, array.length + number); 
    return array; 
} 
+0

http://i.imgur.com/DnbY9LP.png – SusuKacangSoya

+0

沒關係。你使用「整數」,而我使用「整數」。現在我已經切換到了Integer,它可以工作。謝謝。我剛剛瞭解到,原始類型不計爲對象。 – SusuKacangSoya

1

如果「任何陣」你的意思是兩個對象的數組(如String[])和基本類型的陣列(例如int[]),然後仿製藥不會幫助你,而你唯一的選擇就是採取Object並驗證它是一個數組。

public void expand(Object array, int number) { 
    if (! array.getClass().isArray()) 
     throw new IllegalArgumentException("Not an array"); 
    int arrayLen = Array.getLength(array); 

    // Sample methods for accessing array 
    Class<?> arrayValueClass = array.getClass().getComponentType(); // E.g. int.TYPE 
    int firstInt = Array.getInt(array, 0); // Assumes array is int[] 
    Object firstVal = Array.get(array, 0); // Always works. Primitives are boxed 
} 

更新

但是,因爲你只是想調用copyOf一個方便的方法,你最好的解決方案是實現10個版本的expand,一個爲copyOf每個版本,更少,如果你不t需要支持所有原始陣列類型:

public <T> T[] expand(T[] array, int number) { 
    return Arrays.copyOf(array, array.length + number); 
} 
public int[] expand(int[] array, int number) { 
    return Arrays.copyOf(array, array.length + number); 
} 
public double[] expand(double[] array, int number) { 
    return Arrays.copyOf(array, array.length + number); 
} 
// and so on... 
+0

是的,這就是我的意思。謝謝。 – SusuKacangSoya

相關問題