我想將類類型作爲參數傳遞給java.all中具有相同構造函數參數的方法,並在該方法中創建該類的實例.is這可能嗎?傳遞類類型作爲參數並創建它的實例
12
A
回答
14
使用反射創建實例:
Object obj = clazz.newInstance();
這將使用默認no-arg構造函數來創建實例。
Constructor<?> constructor = clazz.getConstructor(String.class);
Object object = constructor.newInstance(new Object[] { strArgument });
要創建實例,如果您有一些其他構造函數需要參數。
3
你需要使用反射來做到這一點,但是它是肯定可能的。
void MyMethod(Class className)
{
try {
Object obj = className.newInstance();
//obj is a newly created object of the passed in type
}
catch (Exception ex) { }
}
2
您正在尋找反射。
你的方法會是這個樣子:
public void m1(Class c) {
try {
Object obj = c.newInstance();
//do something with your new instance
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
}
}
的反射API Oracle的文檔是here
1
是的,你可以
void x(Class cls) throws InstantiationException, IllegalAccessException {
cls.newInstance();
}
注意Class.newInstance可能會失敗,
IllegalAccessException - 如果該類或其null構造方法是不可訪問。 InstantiationException - 如果此類表示抽象類,接口,數組類,基本類型或void;如果此Class表示抽象類,接口,數組類,或者如果班級沒有空的構造函數;或者由於其他原因實例化失敗。
查看API瞭解更多
相關問題
- 1. Java:創建作爲函數參數傳遞的泛型類型的實例
- 2. Scala傳遞類類型作爲參數
- 3. 參考創建類的實例作爲類中創建
- 4. 如何將抽象類作爲參數傳遞給類型的實例?
- 5. 將參考類型作爲參數傳遞並使用泛型
- 6. 傳遞窗口/類型作爲參數
- 7. 在函數中將類/實例函數作爲參數傳遞
- 8. 如何傳遞類類型作爲參數並將其轉換爲參數?
- 9. C#將泛型類型作爲泛型類型參數傳遞?
- 10. 獲取具體類型並創建接口類型參數的實例?
- 11. 傳遞類作爲參數
- 12. 將一個類的實例作爲參數傳遞給C#
- 13. 限制傳遞派生類的實例作爲方法參數
- 14. 如何傳遞類型(例如String)作爲函數參數?
- 15. 在作爲參數傳入的類型中實例化對象
- 16. 作爲類型類實例的函數?
- 17. 將類實例變量作爲參數傳遞
- 18. 傳遞類作爲類型
- 19. 使用擴展參數的類型傳遞作爲泛型類型參數
- 20. 如何創建類的實例並在子類中實現它?
- 21. 如果我使用類作爲類型參數,如何在參數化類中創建此對象的實例?
- 22. 如何爲遞歸數據類型創建任意實例?
- 23. 如何創建並訪問在C#中作爲參數傳遞的匿名類的新實例?
- 24. 如何從類型參數創建類實例?
- 25. 在MVC中創建未知類型的實例並使用它
- 26. 迭代通過類型列表,並傳遞一個類型作爲參數
- 27. 將類的當前實例傳遞給新創建的類
- 28. 創建泛型類型的實例時不能提供參數
- 29. 創建新的泛型類型實例轉換爲根類型?
- 30. 演員對象類是誰的類型作爲參數傳遞
您確定您確實「想要」這樣做嗎?我不會「想」這樣做 - 永遠。 – Dariusz 2013-04-11 06:23:21
你的用例是什麼引人注目? – Santosh 2013-04-11 06:24:37
有一些有效的用例,例如從基於工廠/構造函數的注入實例化類。除非你正在編寫這樣的框架,否則你還可以使用DI來通過構造函數注入來實例化類。 – 2013-04-11 06:29:40