簡體   English   中英

如何在Java中將數組列表從一個類復制到另一個類?

[英]How do I copy an arraylist from one class to another in Java?

我知道要復制一個數組列表並有兩個彼此獨立的列表,您必須使用深層復制(將對象從一個列表復制到另一個列表,而不僅僅是引用),但是有一種方法可以跨類完成?

例如; 我正在從Class1調用Class2。 在Class2中,事件發生時將對象添加到自定義對象的ArrayList中。 我希望能夠將此ArrayList傳輸到Class1,但是每當嘗試嘗試時,我都會得到一個NullPointer。

有任何線索嗎?

這高度表明了設計缺陷。

通過將列表包裝在一個類中,共享該類並使用它來控制對列表的訪問,來查看是否無法實現相同的目標。

唯一不能完全解決問題的情況是,如果您的兩個類必須分別修改列表。

如果這是必需的,那么我可能會將包裝類的不同實例傳遞給每個修改類(具有對同一源列表的引用),然后有一種方法為新添加的數據添加一個引用原始類-通過這種方式查詢時,包裝器將僅返回未加標簽的項目(屬於原始共享列表的項目)和使用其自己的ID進行標簽的項目。

或包裝類可能包含第二個列表,並在查詢時返回原始列表和第二個列表的組合結果。

我幾乎從未想要過深復制。 它發生了,但是非常罕見。

如果您發布更多信息,也許我們可以在重新設計方面更加具體。

還:(編輯)很有可能復制的數組列表不是您的問題-可能不是真正的深層副本。 對於深層復制,這意味着您為數組列表中的每個對象實現了一個復制方法(我相信它們應該被稱為.clone(),我從不使用這種東西-正如我所說的,這是很不好的做法),然后您可以在每種方法上調用復制方法,以在下一個列表中獲取新副本。

此外,您復制的對象引用的任何對象也可能也應該被克隆。 “深”指的是一路下降。

我猜你在這個過程中某處失敗了。

我真的很想聽聽您為什么覺得您需要副本而不是參考。

我的建議是創建一個getArray()方法並從另一個類中調用它。 該方法應該創建ArrayList的副本,因為您不應該在類內“傳遞”變量; 始終使用get()方法,因此OO范例保持不變。

做這樣的事情:

1類

public ArrayList<Object> getArray() {
   ArrayList<Object> aux = new ArrayList<Object>();
    for(Object x : list) //object is the string, int, etc...
        aux.add(x.clone()) //assuming the Object has a clone method!
    return aux;
   }

在第2類上,只需調用此方法。 然后,只需從另一個答案中查看有關null異常的測試,就可以正常工作。 希望能幫助到你。

暫無
暫無

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

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