用Java填写列表的方法
我想知道你的意见,你认为用另一种方法填写清单是更好的方法。我知道没有确切的答案,但我希望看到合理的利弊 方法1用Java填写列表的方法,java,collections,Java,Collections,我想知道你的意见,你认为用另一种方法填写清单是更好的方法。我知道没有确切的答案,但我希望看到合理的利弊 方法1 private List<Snap> snapList; snapList = getSnapList(); 私有列表快照列表; snapList=getSnapList(); 方法2 private List<Snap> snapList = new ArrayList<Snap>(); fillSnapList(snapList); pri
private List<Snap> snapList;
snapList = getSnapList();
私有列表快照列表;
snapList=getSnapList();
方法2
private List<Snap> snapList = new ArrayList<Snap>();
fillSnapList(snapList);
private List snapList=new ArrayList();
fillSnapList(snapList);
谢谢,
Matyas为什么不遵循JavaAPI的类并使fill方法成为静态的(如果它有意义并且独立于对象状态的话) 像 无论如何,如果fill方法计划更改,那么创建filler接口是有意义的。如果您不是真正的“填充”,而是返回某种类型的对象状态,只需让给定的方法构建列表并返回它即可
public List<Object> getMyStuff()
{
//build and return my stuff
}
public List getMyStuff()
{
//建造并归还我的东西
}
为什么不遵循Java API的类并使fill方法成为静态的(如果它有意义并且独立于对象状态的话)
像
无论如何,如果fill方法计划更改,那么创建filler接口是有意义的。如果您不是真正的“填充”,而是返回某种类型的对象状态,只需让给定的方法构建列表并返回它即可
public List<Object> getMyStuff()
{
//build and return my stuff
}
public List getMyStuff()
{
//建造并归还我的东西
}
第一个选项的一个缺点是,您选择的方法名(getSnapList()
)通常被认为是一个简单的访问器,即返回字段snapList
的引用。在您的设计中,这意味着您将创建一个不存在的列表,并用数据填充它,这将给正常习惯用法带来副作用
因此,最好是明确的,我更喜欢第二个选项。第一个选项的一个缺点是,您选择的方法名(
getSnapList()
)通常被认为是一个简单的访问器,即返回字段snapList
的引用。在您的设计中,这意味着您将创建一个不存在的列表,并用数据填充它,这将给正常习惯用法带来副作用
由于这一点,而且最好是明确的,我更喜欢第二个选项。我更喜欢方法1而不是方法2,因为列表实际上是您正在调用的方法的输出。方法1比方法2更清楚地说明了这一点
private List<Snap> snapList = new ArrayList<Snap>();
fillSnapList(snapList);
此外,方法1为该方法提供了返回不可修改列表的机会。如果列表应该填写一次,以后不应该修改,那么您可能需要这样做
Java不是函数式编程语言,但第一种方法比第二种方法更具有函数式编程风格(在函数式编程中,不变性和避免可变状态是重要的思想,它们的一个重要优点是使并发编程更容易,这在非函数式编程语言中也很有用)与方法2相比,我更喜欢方法1,因为列表实际上是您正在调用的方法的输出。方法1比方法2更清楚
private List<Snap> snapList = new ArrayList<Snap>();
fillSnapList(snapList);
此外,方法1使该方法有机会返回一个不可修改的列表。如果该列表只需填写一次,以后不应修改,则可能需要这样做
Java不是函数式编程语言,但第一种方法比第二种方法更具有函数式编程风格(在函数式编程中,不变性和避免可变状态是重要的思想,它们的一个重要优点是使并发编程更容易,这在非函数式编程语言中也很有用)。这取决于具体情况 类似于
getSnapList()
的方法适用于以下情况:
LinkedList
,那么您可以在getSnapList()
中执行该操作,而不是调用fillSnapList()
的所有方法fillSnapList()
的方法适用于以下情况:
这要视情况而定 类似于
getSnapList()
的方法适用于以下情况:
LinkedList
,那么您可以在getSnapList()
中执行该操作,而不是调用fillSnapList()
的所有方法fillSnapList()
的方法适用于以下情况: