Java Can';t通过反射实例化类
当我使用java反射创建对象时,它将抛出一个“java.lang.ClassNotFoundException”,这是我的代码:Java Can';t通过反射实例化类,java,reflection,Java,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("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
的解决方案的额外积分:)
在哪个包中是
Demo
?org.ejs.Demo.createObj然后尝试Class.forName(“org.ejs.Demo.createObj.Demo”)代码>哦,你是rihgt,包裹是必须的,谢谢!
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);
}