我有一个类名数组:
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
答案 0 :(得分:2)
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();
}
}
}