我如何使用Java反射来实例化无法导入的类?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使用Java反射来实例化无法导入的类?相关的知识,希望对你有一定的参考价值。
我正在编写JUnit测试,以测试另一个必须符合预定义规范的软件包中的代码。被测试的代码必须包含一个嵌套类,该类要在测试包中实例化-无法导入此类,因为它是嵌套的(因此在原始包外部不可见)。
例如包装结构:
packageA
-> ClassA
-> packageA.ClassA$ClassB
tests
-> ClassATest
我需要在ClassA中测试一个以ClassB实例作为参数的方法。
我当前正在使用反射从ClassA
(我可以导入)到ClassB
[cls.getDeclaredClasses
]。然后,我可以获得ClassB
[cls.getDeclaredConstructor
]的构造函数,从而使用找到的构造函数[ClassB
]创建constructor.newInstance
的新实例。对此constructor.newInstance
的调用返回一个Object
。
如何将返回的Object
类型转换为正确的ClassB
类型,以便可以将其传递给受测试的ClassA
方法?
答案
首先,可以导入嵌套类。 Cannot `import static` static inner class?
这听起来是一个糟糕的设计,您不得不使用反射进行测试。
因为您从反射中获得了Object
,并且没有可访问的类型,所以您还应该再次使用反射将其传递给方法。
以上是关于我如何使用Java反射来实例化无法导入的类?的主要内容,如果未能解决你的问题,请参考以下文章