0

当我使用 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();
    }
}

我错了。

4

3 回答 3

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();
    }
}
于 2013-05-20T14:41:18.813 回答
1

将完整的包名称传递给forName方法。

于 2013-05-20T14:42:19.963 回答
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);
    }
于 2013-05-20T14:55:24.683 回答