我在構造函數中提供了具有Class<T>
對象的泛型類型。我想在這個構造函數中創建二維數組T[][]
,但是這有可能嗎?使用Class對象創建通用二維數組
回答
同How to create a generic array in Java?而是擴大到2D:閱讀上述JAB的評論後
import java.lang.reflect.Array;
public class Example <T> {
private final Class<? extends T> cls;
public Example (Class<? extends T> cls) {
this.cls = cls;
}
public void arrayExample() {
// a [10][20] array
@SuppressWarnings("unchecked")
T[][] array = (T[][])Array.newInstance(cls, 10, 20);
System.out.println(array.length + " " + array[0].length + " " + array.getClass());
}
public static final void main (String[] args) {
new Example<Integer>(Integer.class).arrayExample();
}
}
注意:要擴展到更多的維度,只需添加[]的和尺寸參數的newInstance()(CLS是一類,D1〜D5爲整數):
T[] array = (T[])Array.newInstance(cls, d1);
T[][] array = (T[][])Array.newInstance(cls, d1, d2);
T[][][] array = (T[][][])Array.newInstance(cls, d1, d2, d3);
T[][][][] array = (T[][][][])Array.newInstance(cls, d1, d2, d3, d4);
T[][][][][] array = (T[][][][][])Array.newInstance(cls, d1, d2, d3, d4, d5);
我注意到OP編輯了這個問題並添加了「在這個構造函數中」。與上述方法相同(例如,將arrayExample()中的代碼移入構造函數中)。 –
謝謝,我不知道(我認爲我檢查了文檔),我可以使用newInstance更多的參數 - 我的錯,我可以檢查出來。 –
投射到T [] []'(或其他)是不安全的。 'cls'可能是一個原始類型。 – newacct
你必須使用反射,但它是可能的:http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html#newInstance%28java.lang.Class,%20int...%29
創建一個具有指定的組件類型和維度的新數組。
- 1. 使用對象創建一個二維數組 - Javascript
- 2. 使用二維數組創建表格
- 3. JavaScript - 二維數組/對象
- 4. jquery創建二維數組
- 5. F#創建二維數組
- 6. 創建二維數組
- 7. 通二維數組引用
- 8. 用多維數組創建多維對象
- 9. 對象創建並將它們放入二維數組
- 10. JAVA:從二維數組中創建對象
- 11. 如何初始化創建的對象的二維數組?
- 12. 如何從列表中創建對象的二維數組?
- 13. 迷宮遊戲,創建二維數組對象
- 14. 創建二維數組的數組
- 15. 創建二維數組的數組
- 16. 如何創建二維數組的二維數組?
- 17. 如何創建二維char數組的二維數組?
- 18. 用Java創建一個二維數組(開發國際象棋)
- 19. 使用javascript創建2維對象或數組
- 20. 使用對象創建二維向量C++
- 21. 對於使用二維數組
- 22. java:多維通用數組創建
- 23. PHP:使用值作爲鍵創建多維數組中的二維數組
- 24. 使用lodash創建對象數組
- 25. 使用對象數組創建索引
- 26. 使用參數組合創建對象
- 27. 使用數組創建對象名稱
- 28. 如何使用動態創建的一維數組通過二維數組引用僅與標準庫?
- 29. 使用箭二維數組
- 30. MATLAB使用二維數組
不適用於Java,僅適用於運行時泛型類似C#的語言。考慮刪除。 –
請發佈您正在考慮使用的構造函數的特定簽名。這可能是可能的,但不清楚你在問什麼。 – chrylis
是的,你可以使用Array.newInstance()。請參閱http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation。我會重複舉牌,但我沒有參加比賽,有人可以照顧這件事嗎? –