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. GLTF创建实例
- 4. 实例创建(JS)
- 5. 创建EC2实例
- 6. StructureMap创建实例
- 7. 创建此实例
- 8. GSON实例创建者创建的实例,但字段为空
- 9. 创建模型创建OneToOne实例
- 10. 0x80004005创建实例失败
- 11. NSTimer - 创建多个实例
- 12. 创建类的实例
- 13. 的Java创建实例
- 14. 在java中创建实例
- 15. Java:创建新实例
- 16. jQuery - 创建多个实例
- 17. WMI创建实例事件
- 18. 创建的实例是空
- 19. CGLIB - 控制实例创建
- 20. 创建实例从属性
- 21. 创建函数的实例
- 22. 如何创建CommonsMultipartFile实例
- 23. AS3.0:ACCES创建的实例
- 24. C#创建一个实例
- 25. 创建实例(静态)
- 26. 创建类的实例
- 27. 创建对象实例
- 28. 创建图形实例时
- 29. 实例创建Jython中
- 30. 创建CallbackManager.Factory.create()的实例;
使用C++,Java还是什么? – peoro 2011-01-27 13:26:18