[英]Question about using ArrayList in Java?
我真的不知道標題是否合適。
我有2個選項:選項1:
Class A {
ArrayList<B> BList = new ArrayList<B>();
public B[] getBList() {
return (B[])BList.toArray();
}
}
Class Facade {
public B[] getAllB(){
A a = new A();
return a.getBList();
}
}
選項2:
Class A {
ArrayList<B> BList = new ArrayList<B>();
public ArrayList getBList() {
return BList;
}
}
Class Facade {
public B[] getAllB(){
A a = new A();
ArrayList BList = a.getBList();
return (B[])BList.toArray();
}
}
我應該使用哪個選項?
使用集合類,除非您有特定的原因要使用數組。 因此,我將選擇選項2。
關於您的代碼,還有許多其他注釋。
首先,最好是對接口進行編程,而不是對實現進行編程 -使類A
的成員變量BList
成為List<B>
而不是ArrayList<B>
。 另外,成員變量應該是private
(除非有充分的理由使它們不private
)。 第三,盡可能使用泛型-為什么您的方法getBList()
返回原始ArrayList
? Java中變量的實際命名標准是駝峰式大小寫 ,以小寫字母開頭。 因此,請勿調用成員變量BList
,而bList
調用bList
(或其他更好的名稱)。
class A {
private List<B> bList = new ArrayList<B>();
public List<B> getBList() {
return bList;
}
}
Facade
類是否真的需要返回B[]
?
要考慮的另一點是使類A
不可變,因為如果您從A
對象獲取列表,然后從列表中添加或刪除元素,則可能會發生意外的事情( A
對象內部的列表也會更改,並且可能會造成混淆)。 您必須在getBList()
方法中返回列表的只讀視圖:
public List<B> getBList() {
return Collections.unmodifiableList(bList);
}
無論哪種方式,我都沒有強烈的偏愛。 但是,我注意到您正在使用數組返回列表的內容,也許是為了使其不可變。 我建議改為使用Collections.unmodifiableList 。
我認為唯一的區別是A類是否是組件公共接口的一部分。
如果不是(例如,僅Facade會計入公共界面),那么這無關緊要 。
如果A類是公共接口的一部分,我會選擇Option 1。
除非您確實真的需要,否則某些事物的本機形式是類似於圖像之類的bytes [],則應始終在API中為許多事物而不是數組返回Collection類型。 在您的情況下,請使用Collections.unmodifiableXXX(...)包裝原始Collection。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.