我測試了你的代碼,它的工作正常。但我也能夠重現你的問題。
假設,您呼叫
factoryMethod(MyClass.class);
然後,如果類「MyClass的」裏面的OWN類文件其做工精細,只需提供
concreteClass.newInstance();
具有的執行。當類作爲內部類類型,類未找到異常被拋出。
的原因是,一個內部類實際上是一種類型的嵌套類,因此創建一個實例是唯一可能的,與包圍類,也工作時。
在下面給出的示例中,newInstance()
方法已經與內部類一起使用。
public class Test {
public class MyClass implements MyInterface {
}
public interface MyInterface {
}
public static void main(String[] args){
MyInterface ret = method(MyClass.class);
if (ret instanceof MyClass){
System.out.println("Is MyClass");
}
}
public static MyInterface method(Class<? extends MyInterface> actualClass){
try {
Class<?> enclosingClass = Class.forName(actualClass.getDeclaringClass().getCanonicalName());
Object enclosingInstance = enclosingClass.newInstance();
Class<?> innerClass = Class.forName(actualClass.getName());
Constructor<?> constructor = innerClass.getDeclaredConstructor(enclosingClass);
Object innerInstance = constructor.newInstance(enclosingInstance);
return (MyInterface) innerInstance;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
你確定IMyInterface在你的類路徑上嗎?通常,NoClassDefFoundError是由於類路徑問題而引發的運行時錯誤。 –
你可以在沒有反射的情況下創建你的類的實例嗎? 'NoClassDefFoundError'通常發生在代碼依賴的類在編譯時出現在類路徑中,但在執行代碼時不在類路徑中。 – Pshemo
你能顯示你的代碼的其餘部分的片段嗎?例如,IMyInterface? – Jason