我想知道您的意见,您发现是一种更好的方法,可以使用不同的方法填充列表。我知道没有明确的答案,但我希望看到合理的利弊。填写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