Я проверил ваш код и его работоспособность. Но я также смог воспроизвести вашу проблему.
Предполагая, что вы звоните
factoryMethod(MyClass.class);
Тогда, если класс «MyClass» находится внутри его СОБСТВЕННЫХ файлов классы его прекрасно работать только с обеспечивая
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