簡體   English   中英

如何使用java反射來實例化一個無法導入的類?

[英]How do I use java reflection to instantiate a class that cannot be imported?

我正在編寫 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方法?

首先,可以導入嵌套類。 不能`import static`靜態內部類嗎?

這聽起來是一個糟糕的設計,您被迫使用反射進行測試。

因為您從反射獲得了Object並且您沒有可訪問的類型,所以您還應該再次使用反射將其傳遞給方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM