以下情况: 我创建了一些方法,允许我操作列表。举个简单的例子,这些方法是 addSomeElements(...) 和 removeSomeElements(...)
调用这些方法的最佳方法是什么?我知道以下方法可以做到这一点,但不知道哪一个最好?!
1)重新初始化列表
private void doSomething(List<String> list) {
list = addSomeElements(list);
list = removeSomeElements(list);
}
在这种情况下,方法当然必须返回一个列表:
private List<String> addSomeElements(List<String> list) {
list.add(...);
return list;
}
2)创建新变量
private void doSomething(List<String> list) {
final List<String> list2 = addSomeElements(list);
final List<String> list3 = removeSomeElements(list2);
}
private List<String> addSomeElements(List<String> list) {
final List<String> newList = new ArrayList<String>(list);
newList.add(...);
return newList;
}
3)使用 void 方法
private void doSomething(List<String> list) {
addSomeElements(list);
removeSomeElements(list);
}
private void addSomeElements(List<String> list) {
list.add(...);
}
这将是最简单的方法,但我不太喜欢它,因为我认为对于用户来说,你在做什么并不总是显而易见的。例如,如果您有一个 int,您可以将其声明为 int myInt = 0。当您想要更改该值时,您可以直接说 myInt = 1。很明显,myInt 现在有了一个新值。但有了 list 就不一样了。您想要更改的列表可能只是您想要调用来修改列表的方法的几个参数之一。如果方法的命名没有告诉用户,用户可能不会意识到您已经修改了列表,该列表似乎只是一个参数。
这里“最干净”的方法是什么?
最佳答案
如果您要修改传递到方法中的列表,请不要返回列表引用(您的选项#1和选项#2自编辑后);它在 API 级别给人的印象是您正在创建一个新列表,而不是修改给您的列表。
这给您留下了两个选择,其中任何一个都是“最佳实践”,具体取决于上下文:
修改传入的列表,并使用
void
方法(或在适当的情况下完全返回其他内容的方法)。 (这是你的选项#3。)通过添加/删除创建新列表,并返回对新列表的引用。 (这就像您编辑的选项 #2,但请注意,您还必须从
doSomething
返回list3
才能使其有意义。 )
关于java - 操作集合的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433073/