![](/img/trans.png)
[英]How can I create a new instance of array dynamically if my array size is full in 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.