簡體   English   中英

有關在Java中使用ArrayList的問題?

[英]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.

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