无法通过反射实例化一个类

时间:2013-05-20 14:39:21

标签: 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();
    }
}

我错了。

3 个答案:

答案 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);
    }