[英]Can't instantiate a class through reflection
当我使用java反射创建对象时,它将抛出“ java.lang.ClassNotFoundException”,这是我的代码:
public class Demo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("Demo");
Demo d = (Demo) clazz.newInstance();
}
}
我错了。
您必须使用类的完全限定名称,即包括包,例如:
public class Demo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("com.mycompany.mypackage.Demo");
Demo d = (Demo) clazz.newInstance();
}
}
将完整的程序包名称传递给forName
方法。
或者,对于基于java.lang.invoke
的解决方案,加分:)
MethodType mt; MethodHandle mh;
MethodHandles.Lookup lookup = MethodHandles.lookup();
mt = MethodType.methodType(void.class);
try {
Class klass = Class.forName("com.mycompany.mypackage.Demo");
mh = lookup.findConstructor(klass, mt);
Object obj = (Object)mh.invoke();
} catch (Throwable ex) {
// ERR
System.out.println(ex);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.