创建实例

时间:2011-01-27 13:24:48

标签: java oop

我有一个包含类名的字符串。 我想为该类创建一个实例..

class  Test
{}
主要功能

中的

String str="Test";

我必须仅使用str变量创建Test类的实例...

8 个答案:

答案 0 :(得分: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");
    }
}

答案 1 :(得分:2)

使用Java,您需要使用Reflection API

String className = "Test";
Test newInst = (Test)Class.forName(className).newInstance();

C ++没有与Java相当的本机Reflection,因此您需要自己实现它:

void* newInstance(std::string className) {
    if (className == "Test") {
        return new Test();
    }

    return 0;
}

答案 2 :(得分:1)

你不能在C ++中本地这样做。将需要通过使用一些结构(可能是查找表)来模拟反射,这些结构将字符串与类型相关联,这将为您创建对象。

答案 3 :(得分:1)

Class.forName(str).newInstance();

上面的代码返回该类的对象。确保'str'具有完全限定的类名。

答案 4 :(得分:1)

在Java中,默认情况下您支持反射。在本机C ++中,您没有反射。如果您需要使用C ++进行反思,请尝试使用Qt等框架。

答案 5 :(得分:0)

Object obj = Class.forName(str).newInstance();

答案 6 :(得分:0)

Test t = (Test) Class.forName(className).newInstance()

答案 7 :(得分:0)

您尝试描述的通用OOP技术称为抽象工厂模式,您可以在其中读取数据,然后在运行时决定要创建的类的类型。

通常,该类将来自已知的基础,否则它必须是某种变体类型。

对于从已知基础派生的类,您将继续调用其虚拟/抽象方法(多态)。对于变体类型,您可能会“访问”它。