当我用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();
}
}
我错了。
答案 0 :(得分:10)
您必须使用类的完全限定名称,即包括包,例如:
public class Demo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("com.mycompany.mypackage.Demo");
Demo d = (Demo) clazz.newInstance();
}
}
答案 1 :(得分:1)
将完整的包名称传递给forName
方法。
答案 2 :(得分:0)
或者,基于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);
}