簡體   English   中英

實例化沒有默認構造函數的類

[英]Instantiating a class with no default constructor

對於許多框架開發,我們需要通過從配置文件中讀取合格的類名來實例化類。

有不同的自省策略,專門針對它的庫(例如Objenesis)。

但是,對於沒有默認構造函數(重載)的類,如果我們不知道重載的構造函數的簽名,則我認為不會進行自省。 非標准方法是使用sun.misc.Unsafe類進行分配。 這是我的理解。 這是正確的理解嗎?

這就存在一個問題,因為不能通過使用Unsafe實例化超類。 但是我認為Unsafe最接近C語言“新”運算符調用的內容,至少是其中的一部分。

因此,問題是,當我們擁有的唯一信息是類的限定名稱(當然也存在於類路徑的某個地方!)時,我們是否可以通過某種形式的自省,以某種方式像新操作員那樣使用Java實例化對象的方式! )

我不確定我是否理解您的問題,但是通常在Java中,如果您知道類名,則可以簡單地編寫:classname myObject = new classname();

如果只擁有一個類名,則可以使用Class.newInstance(),但是如果它沒有默認構造函數,則可以使用Unsafe.allocateInstance()。

您可以使用反射來找到要調用的構造函數,但是您不知道要傳遞哪個參數或傳遞什么參數。

暫無
暫無

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

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