public void expand(???, int number) {
array = java.util.Arrays.copyOf(array, array.length + number);
}
在「???」中,我想接受任何類型的數組。解決方案在於泛型類型嗎?如何請求任何數組作爲參數?
public void expand(???, int number) {
array = java.util.Arrays.copyOf(array, array.length + number);
}
在「???」中,我想接受任何類型的數組。解決方案在於泛型類型嗎?如何請求任何數組作爲參數?
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;
}
http://i.imgur.com/DnbY9LP.png – SusuKacangSoya
沒關係。你使用「整數」,而我使用「整數」。現在我已經切換到了Integer,它可以工作。謝謝。我剛剛瞭解到,原始類型不計爲對象。 – SusuKacangSoya
如果「任何陣」你的意思是兩個對象的數組(如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...
是的,這就是我的意思。謝謝。 – SusuKacangSoya
取決於您想要做什麼。數組通常不能很好地處理泛型,因爲你不能分配一個通用數組。然而,你可以在'Array'上使用一些靜態方法來實例化這樣一個數組' – Dici
'Object [] array'? –
該方法的唯一目的是使用copyOf獲取數組並增加其長度。我之前使用過copyOf和由我自己製作的對象組成的數組,因此我知道copyOf將能夠接受任何數組,無論類型如何。我希望這種擴展方法具有相同的靈活性。 – SusuKacangSoya