2013-05-20 65 views
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

其中包'Demo'加分? – jlordo

+0

org.ejs.demo.createObj –

+3

然后尝试'Class.forName(“org.ejs.demo.createObj.Demo”);' – Pshemo

回答

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

通完整的包名forName方法。

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