Java getDeclaredConstructor失败,JUnit中出现NoSuchMethodException
我有一个基类,它使用反射创建混凝土类的空副本,使用以下命令:Java getDeclaredConstructor失败,JUnit中出现NoSuchMethodException,java,reflection,junit,Java,Reflection,Junit,我有一个基类,它使用反射创建混凝土类的空副本,使用以下命令: public IBase getEmptyCopy() { Class type = this.getClass(); Constructor<?> ctor; try { ctor = type.getDeclaredConstructor(); ctor.setAccessible(true); clonedObject
public IBase getEmptyCopy() {
Class type = this.getClass();
Constructor<?> ctor;
try {
ctor = type.getDeclaredConstructor();
ctor.setAccessible(true);
clonedObject =(Base) ctor.newInstance();
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
但是,当我尝试在JUnit测试用例中执行相同操作时,所有这些似乎都起作用:
@Test
public void test() {
....
ConcreteClass emptyInstance = (ConcreteClass) someInstance.getEmptyCopy();
}
我在getDeclaredConstructor调用中得到一个java.lang.NoSuchMethodException
有人能解释一下原因吗
谢谢。粘贴完整的类定义。是的。此外,克隆方法看起来就像某种片段,因为它实际上没有返回语句。。。数据太少,无法提供帮助:)我发现了一个突破:SomeInstance的创建使用了初始化语法,这显然创建了一个匿名类。一旦我删除了初始化语法,它就可以在JUnit和常规main中工作。现在的问题是,JUnit中是否有一些不同的匿名类处理?
@Test
public void test() {
....
ConcreteClass emptyInstance = (ConcreteClass) someInstance.getEmptyCopy();
}