Q
創建實例
1
A
回答
3
您必須使用稱爲反射的技術。這裏是Wikipedia article on Reflection (computer programming)。
對於Java:看看Class
class,特別是Class.newInstance
method。
下面是一個簡單的 「Hello World」 程序來演示:
public class Test {
public static void main(String[] args) throws Exception {
String className = "Test";
Class c = Class.forName(className);
Object o = c.newInstance();
((Test) o).method();
}
public void method() {
System.out.println("Hello World");
}
}
0
嘗試
Object obj = Class.forName(str).newInstance();
0
Test t = (Test) Class.forName(className).newInstance()
1
你不能做到這一點用C本身 ++。將需要通過使用某些結構(可能會查找表)來模擬反射,這些結構會將字符串與類型相關聯,這將爲您創建對象。
1
Class.forName(str).newInstance();
上面的代碼返回該類的一個對象。確保'str'具有完全限定的類名稱。
2
使用Java,你需要使用Reflection API:
String className = "Test";
Test newInst = (Test)Class.forName(className).newInstance();
C++卻毫無反思等同於Java,所以你需要自己實現:
void* newInstance(std::string className) {
if (className == "Test") {
return new Test();
}
return 0;
}
1
在Java中,你有支持默認情況下的反射。在本機C++中,你沒有反思。如果您需要C++的反思,請嘗試使用像Qt這樣的框架。
0
您試圖描述的通用OOP技術稱爲抽象工廠模式,您可以在其中讀取數據,然後在運行時決定要創建的類的類型。
通常這個類將從一個已知的基礎派生,否則它將不得不是某種變體類型。
對於派生自已知基的類,您將繼續調用其虛擬/抽象方法(多態性)。對於變體類型,您可能會「訪問」它。
相關問題
- 1. 創建實例
- 2. 創建實例
- 3. StructureMap創建實例
- 4. 創建EC2實例
- 5. GLTF創建實例
- 6. GSON實例創建者創建的實例,但字段爲空
- 7. 創建模型創建OneToOne實例
- 8. 創建資源實例?
- 9. 無法創建類實例
- 10. 從類名創建實例
- 11. 混淆創建類實例
- 12. 發佈excel實例創建
- 13. AWS實例創建錯誤
- 14. 創建類的實例
- 15. 在哪裏創建實例
- 16. 創建對象實例
- 17. CGLIB - 控制實例創建
- 18. 創建CallbackManager.Factory.create()的實例;
- 19. 如何創建CommonsMultipartFile實例
- 20. 創建函數的實例
- 21. 創建Haskell實例聲明
- 22. WMI創建實例事件
- 23. 創建「noname」類實例
- 24. AS3.0:ACCES創建的實例
- 25. 無法創建「Ribbon」實例
- 26. 如何創建QWebFrame實例
- 27. 0x80004005創建實例失敗
- 28. 錯誤創建EC2實例
- 29. 創建實例(靜態)
- 30. 創建類的實例
使用C++,Java還是什麼? – peoro 2011-01-27 13:26:18