Java 如何用它来实例化一个类';谁的字符串名?
我有一个类名数组:Java 如何用它来实例化一个类';谁的字符串名?,java,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
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都扩展了某些类类型:
String className=“MyClass”;
Class myClass=Class.forName(className);
MyClass ob=(MyClass)MyClass.newInstance();
您可以使用获取类类型,然后使用clazz.newInstance()
获取该类的实例
问题是您需要完整的限定名(类和包的名称),如果您没有完整的名称,您可以使用反射
来迭代包并获得所需的类
您可以看到一个工作示例看看Java反射教程()。以下是一个例子:
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();
}
}
}
公共类你好{
公共图书馆{
System.out.println(“内部Hello foo()…”;
}
公共静态void main(字符串[]args){
丙级;;
试一试{
c=Class.forName(“你好”);
Hello h=(Hello)c.newInstance();
h、 foo();
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(实例化异常e){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}
}
}
可能的重复项和
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();
}
}
}