所以我有一个这样的功能:
public void doSomeWork(List<Item> items){
//modify the items
return;
}
返回 void 是一个好的设计,还是只返回列表更好?
所以我有一个这样的功能:
public void doSomeWork(List<Item> items){
//modify the items
return;
}
返回 void 是一个好的设计,还是只返回列表更好?
查看 JDK 本身。你看到返回的方法了void
吗?(我愿意。)
您的选择与正确或正确的错误观念无关。这是关于您是否希望允许副作用。
您可以通过以下两种方式之一编写该方法:
public void doSomeWork(List<Item> items){
// You can't modify the items reference, but you can modify the List that it points to by adding or removing Items.
}
这具有修改通过它的列表的副作用。如果客户不知道,这可能会给他们带来不愉快的惊喜。
第二种方式意味着传入一个 List 并返回修改后的版本:
public List<Item> doSomeWork(List<Item> items){
List<Item> modified = new ArrayList<Item>(items);
// modify the returned List
return modified;
}
这样对客户来说并没有什么意外:传入的 List 保持不变。这是一种更实用的风格。它也很“流畅”。但它是以更多内存为代价的,因为您分配了一个新列表。
当然。如果没有什么可返回,则返回类型为void
. 您也不需要明确的return;
声明。只是让执行从函数的底部掉下来。
public void doSomeWork(List<Item> items){
//modify the items
}
问题归结为你是否有一个有意义的返回值。不这样做完全没问题。
如果不返回任何东西在语义上是有意义的,那么不返回任何东西是完全可以的。
即使它是无效的,如果您需要在某些时候退出方法,您可以使用 return;。否则不需要这样做。
public void doSomeWork(List<Item> items){
if(some condition){
return;
}
// Do my work
}
有时方法不需要返回值。它的所有工作都只是在内部完成,没有任何迹象表明真的需要出去。
这是一种很好的设计实践,尤其是具有诸如设置器和init()
方法之类的功能。这些都不需要向调用它的人返回值以指示任何内容。