如何使用它的字符串名称实例化一个类?

时间:2014-05-28 15:04:56

标签: java

我有一个类名数组:

String[] myClasses = { "Hello", "World" };

有没有办法用字符串名实例化一个类? 例如:

public SomeClassType getMyClass(String className) {
  ???
}

getMyClass("Hello"); // returns an instance of the Hello class
getMyClass("World"); // returns an instance of the World class

ps:显然没有遍历所有字符串。

ps:Hello和World都扩展了SomeClassType

3 个答案:

答案 0 :(得分:2)

Java Reflection API

String className = "MyClass";
Class<?> myClass = Class.forName(className);
MyClass ob = (MyClass) myClass.newInstance();

答案 1 :(得分:2)

您可以使用Class#forName获取Class type,然后使用clazz.newInstance()获取该课程的实例。

问题是您需要完整的限定符名称(类和包的名称),如果您没有全名,可以使用Reflection来迭代包并获取类想。

您可以看到一个有效的示例here

答案 2 :(得分:0)

查看Java反射教程(http://docs.oracle.com/javase/tutorial/reflect/class/index.html)。这是一个例子:

public class Hello {

    public void foo() {
        System.out.println("Inside Hello foo()...");
    }

    public static void main(String[] args) {
        Class<?> c;
        try {
            c = Class.forName("Hello");
            Hello h = (Hello) c.newInstance();
            h.foo();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

}