我想知道您的意見,您發現是一種更好的方法,可以使用不同的方法填充列表。我知道沒有明確的答案,但我希望看到合理的利弊。填寫Java列表的方法
接近1
private List<Snap> snapList;
snapList = getSnapList();
方法2.
private List<Snap> snapList = new ArrayList<Snap>();
fillSnapList(snapList);
感謝, 馬加什
我想知道您的意見,您發現是一種更好的方法,可以使用不同的方法填充列表。我知道沒有明確的答案,但我希望看到合理的利弊。填寫Java列表的方法
接近1
private List<Snap> snapList;
snapList = getSnapList();
方法2.
private List<Snap> snapList = new ArrayList<Snap>();
fillSnapList(snapList);
感謝, 馬加什
我比方法2更喜歡方法1,因爲列表實際上是您調用的方法的輸出。方法1使得比方法2更清楚。
此外,方法1給予該方法返回不可修改列表的機會。如果列表應該填充一次,並且以後不應該修改,則可能需要這樣做。 Java不是一種函數式編程語言,但第一種方法更多的是函數式編程風格而不是第二種方法(在函數式編程中,不變性和避免可變狀態是重要的想法 - 這些中的一個重要優點是它們使併發編程更容易,這在非函數式編程語言中也很有用)。
嘿,非常好的論點......和愛的功能觀點:) – helios
這完全取決於你的背景。
爲什麼不按照Java API的Collections類,使你的填充方法是靜態的(如果它是有意義的並且獨立於對象狀態)。
Collections.fill(mylist, 0);
像
MyListFiller.fill(myList, args);
在任何情況下,創造一個填料接口有道理的,如果補法計劃改變。如果你不是真的「填充」,但返回某種類型的對象狀態,只需讓給定的方法構建List並返回它。對於第一種選擇
public List<Object> getMyStuff()
{
//build and return my stuff
}
我喜歡靜態方法的想法。然而,我被卡住了,因爲我想有一個可以利用依賴注入的fill方法的接口。但是我不能在接口中定義靜態方法。你有什麼建議? – Matyas
使用填充方法制作填充界面。它與單個靜態類的工作方式大致相同。填充填充而不是MyFiller.fill。 –
一個con是,你已經選擇方法名(getSnapList()
)通常被認爲是一個簡單的訪問,即對現場snapList
返回參考。在你的設計中,暗示你將創建列表,如果它不存在並填充數據,這會給正常的習慣用法帶來副作用。
由於這個原因,最好是明確的,我更喜歡第二個選項。
這取決於情況。
像getSnapList()
的方法是在像下列情況下適當:
LinkedList
,那麼你就可以做到這一點在getSnapList()
,而不是所有的調用fillSnapList()
方法。像fillSnapList()
的方法是在像下列情況下適當:
我更喜歡方法#1,因爲方法可以被希望使用不同List實現的子類覆蓋。另外,我認爲將工廠方法命名爲getter會令人困惑,我寧願將其命名爲newSnapList()或createSnapList()。
這應該是社區wiki。 – IAdapter