我如何使用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反射来实例化无法导入的类?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何通过一个字符串来实例化一个类并调用其中方法

java 反射

反射异常 java.lang.InstantiationException处理

Java 为什么要使用反射(通俗易懂的举例)

java反射:入门使用原理

java反射的学习