簡體   English   中英

如何在Java中動態創建對象的新實例?

[英]How can I dynamically create a new instance of an object in Java?

我有一個名為GetInput.java的類,還有一個名為GetNotReleasedInput.java的類。 我在GetNotReleasedInput擴展了GetInput GetInput ,我調用一個名為addLineToArray()的私有函數,並在該函數中定義一個新類,其中包含有關導入的詳細信息。

但是,由於我正在為所有輸入文件創建一個通用類( GetInput ),所以我不能在addLineToArray()說:

AAData nextData = new AAData();

因為我有AA /未發布,因此在這種情況下,它應該不發布。 那么,如何在該函數中動態創建新的nextData呢?

您可以使用受保護的方法來創建nextData對象,以便子類可以決定如何進行制造,或者您可以將某種工廠對象(可在外部對象創建時進行配置)委托給該對象。 做后者的最簡單的方法是在傳遞Class ,並調用它newInstance()方法,但還有很多更復雜可能; 關於軟件模式的書將對此進行深入的探討。

但是,如果您可以將整個事情委托給GetInput的子類,那么這是最簡單的。 (您沒有為我提供足夠的信息,無法確定您應該實際使用的模式。)

聽起來您可能想要一個虛擬工廠方法 ,可以在其中放置對象創建對象。 addLineToArray()你再調用虛擬createLineObject()而不是new AAData()

但是,究竟要走的路取決於許多因素:創建的數據類型取決於GetInput類,還是該決定是單獨的(您的GetInput類可能因行為而異,而數據隨格式而異)? 是否所有數據都相關(例如,繼承自AAData )?

您應該添加有關您要完成的任務的更多詳細信息。

Java默認情況下不允許在運行時修改元數據。 您可以使用asm編寫自己的類加載器,並在類加載時修改字節碼,但這可能不是您想要的。

相反,我建議您所有的類數據類都實現Iterable或類似的東西,以便您可以輕松地然后聯接並遍歷所有行,而無需知道實際的類型。

暫無
暫無

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

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