[英]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.