简体   繁体   English

无法通过反思实例化课程

[英]Can't instantiate a class through reflection

When I user java reflection to create object,It will throw an "java.lang.ClassNotFoundException",this is my code: 当我使用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();
    }
}

where I was wrong. 我错了。

You must use the fully qualified name of the class, ie including the package, eg: 您必须使用类的完全限定名称,即包括包,例如:

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方法。

Or, bonus points for a java.lang.invoke based solution :) 或者,对于基于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM