如何使用java反射实例化无法导入的类



我正在编写JUnit测试,以测试另一个包中的代码,该包必须符合预定义的规范。测试中的代码必须包含一个嵌套类,我想在测试包中实例化它——不可能导入这个类,因为它是嵌套的(因此在原始包外不可见(。

例如,包装结构:

packageA
-> ClassA
-> packageA.ClassA$ClassB
tests
-> ClassATest

我需要在ClassA中测试一个方法,该方法将ClassB的一个实例作为参数。

我目前正在使用反射从ClassA(我可以导入(获取到ClassB[cls.getDeclaredClasses]。然后,我可以获得ClassB[cls.getDeclaredConstructor]的构造函数,从而使用找到的构造函数[constructor.newInstance]创建ClassB的新实例。这个对constructor.newInstance的调用返回一个Object

如何从返回的Object类型转换为正确的ClassB类型,以便将其传递到测试中的ClassA方法中?

首先可以导入嵌套类。无法"导入静态"静态内部类?

这听起来是一个糟糕的设计,你被迫使用反射进行测试。

因为您从反射中获得了Object,并且没有可访问的类型,所以还应该再次使用反射将其传递到方法中。

最新更新