我有下面的Java公共类,如下所示:

public class MyClass
{

  private static class MyNestedClass<T> extends SomeOtherClass
  {
  }

}


我正在编写一个测试,我需要使用PowerMockito为MyNestedClass类创建一个模拟对象,但是由于它是私有的,因此无法访问该类。有什么方法可以访问MyNestedClass?

我尝试了以下方法:

MyClass.MyNestedClass myNestedClass = new MyClass.MyNestedClass()




MyClass testNoteActivity = Mockito.spy(MyClass.class);
testNoteActivity.MyNestedClass myNestedClass = new testNoteActivity.MyNestedClass()


两者都不适合我。

最佳答案

您可以通过反射访问私有类:

final Class<?> nestedClass = Class.forName("MyClass$MyNestedClass");
final Constructor<?> ctor = nestedClass.getDeclaredConstructors()[0];
ctor.setAccessible(true);
final Object instance = ctor.newInstance();
System.out.println(instance);


但这不是很好的做法。

要使用Class.forName查找课程,您应该提供完整的课程名称,包括软件包。例如。如果位于MyClass包中的com.test,则此字符串应为"com.test.MyClass$MyNestedClass"

10-08 09:02