簡體   English   中英

在Java運行時將對象作為成員變量添加到新類中

[英]Adding a an object as a member variable to a new Class in run time in Java

在從運行時從特定包中獲取類名稱的地方有此要求。 我之前不知道上課

List<Class<?>> classes = PlayGround.find("MyOwn.newpackage");

現在我需要為上述列表中的每個類實例化一個新的Object並將其添加為另一個類的成員(例如Class Model)

 for (int i=0;i<classes.size();i++){

    Class tmp = classes.get(i);

    }

是否可以從上述tmp類創建對象並將其作為Java中的實時類模型的成員變量添加?

不太干凈的方法是編輯.java文件流,但想知道我是否可以從程序本身執行此操作。

您想使用Constructor#newInstance(Object...) 這比Class#newInstance更可取,因為后者將傳播no-args構造函數拋出的任何異常,即使該異常是經過檢查的異常也是如此。 這意味着您不會對已檢查的異常進行任何編譯時類型檢查。 相反, Constructor#newInstance將引發一個InvocationTargetException ,該異常包裝由構造函數引發的已檢查異常。

因此,您需要執行以下操作(為簡潔起見,省略了異常處理):

Constructor<?> constructor = tmp.getConstructor();

現在,您可以通過調用constructor.newInstance()創建一個新實例。 至於“將其作為成員變量添加到另一個類中”,為什么需要這樣做? 目標類擁有某種列表會容易得多,然后您只需將新實例插入該列表即可。 或者,如果您確切知道目標類需要哪種類型的對象,請事先創建成員變量,然后就可以直接提供它(通過構造函數或setter方法)。

我們可以使用class.forName() ,該類用於在運行時動態加載類。 例如: class.forName(要加載的類的名稱),如果要為已加載的類創建對象,則可以使用new instance() 例如: Class.forName(“ Employee”)。newInstance()您將獲得employee對象。 這樣,我們可以動態加載類並在運行時創建該加載類的對象。

在您的情況下,您可以遍歷列表並加載類,並為那些已加載的類實例化對象,然后根據需要使用它。

暫無
暫無

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

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