2017-04-21 20 views
2

我有一個列表對象的類是這樣的:我應該爲Java中的列表對象提供一個setter嗎?

import java.util.ArrayList; 
import java.util.List; 

public class MyClass 
{ 
    private List<String> myList; 

    //??? 
} 

現在,讓其他類的訪問列表,我必須添加下列之一:

  • 一個getter和一個setter

  • 一個getter和一個setter和初始化列表在構造一個空的ArrayList

  • 一個getter和setter方法並在構造函數初始化列表與構造函數的參數

  • 一個getter和setter方法有兩個構造

  • 通過列表只有一個吸氣劑並在構造函數中用一個空ArrayList初始化列表

  • 只有一個吸氣劑和itialize在構造函數中帶有關於在構造函數的參數

  • 只有一個getter有兩個構造

什麼是最好的事情過去了一個列表?有約定嗎? 「讓其他類訪問列表」我的意思是什麼都沒有具體,只是一般用法,讓其他類與列表一起工作,存儲和讀取對象。

+0

要做的最好的事情取決於需要和你的需要「讓其他類訪問列表」還不清楚。請更具體一些。 – davidxxx

回答

1

沒有一種方法或慣例允許從一個類的List字段「提供」到另一個類。

通過「讓其他類訪問列表中的」我的意思是沒有什麼具體的, 只是一般的使用,讓其他類與列表,存儲 工作,並在其閱讀對象。

你有廣泛的兩種方式向另一個類提供從類約列表字段信息:

  • 在一個受保護的方式

    。這兩個類的設計不是非常耦合的,除此之外,您還想保護List中添加的數據,該數據來自包含List的類。
    因此,您不提供List的getter和setter,而是您可以提供公共方法來讀取和添加列表中的數據。
    通過這種方式,客戶類不會與所使用的類的實現耦合在一起:它不知道使用了List,並且List的唯一責任(添加/獲取/移動,...應用的操作和規則爲他們)是它的主人。
    用於訪問列表是提供用於列表中的吸氣劑,但通過提供它作爲不可修改的另一種方法:

    public List<YourClass> getReadonlyList(){ return Collections.unmodifiableList(originalList); }

  • 在偶聯方式

    。這兩個班級的設計非常緊密。所以,爲List提供一個getter和setter並不是一個問題。它可能甚至是非常合適的,因爲它避免了引入無用的複雜性。

1

數據隱藏和封裝始終是一個好的原則

這是一種很難沒有一個具體的架構來決定的,許多工具可以與許多生活在沒有將死...

你可以溫柔給使用我們課程的開發者,並允許他們使用setter並給出你的列表不可修改的集合。

這將取決於軟開發人員在創建MyClass實例後需要處理列表多少。

+1

也許太快..你的答案看起來像一個詳細的評論,但不管怎麼說:) – davidxxx

相關問題