在Java中访问嵌套的私有静态类

tec*_*man 3 java testing powermockito

我在 Java 中有以下公共类,如下所示:

public class MyClass 
{

  private static class MyNestedClass<T> extends SomeOtherClass
  {
  }

}
Run Code Online (Sandbox Code Playgroud)

我正在编写一个测试,我需要使用 PowerMockito 为 MyNestedClass 类创建一个模拟对象,但无法访问该类,因为它是私有的。有没有办法访问 MyNestedClass?

我尝试了以下方法:

MyClass.MyNestedClass myNestedClass = new MyClass.MyNestedClass()
Run Code Online (Sandbox Code Playgroud)

MyClass testNoteActivity = Mockito.spy(MyClass.class);
testNoteActivity.MyNestedClass myNestedClass = new testNoteActivity.MyNestedClass()
Run Code Online (Sandbox Code Playgroud)

两者都不适合我。

Kir*_*ill 5

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

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);
Run Code Online (Sandbox Code Playgroud)

但这不是很好的做法。

要查找类,Class.forName您应该提供完整的类名,包括包。例如,如果MyClass位于com.test包中,则该字符串应该是"com.test.MyClass$MyNestedClass".