2013-05-20 77 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); 
    }