1

所以我有一个这样的功能:

public void doSomeWork(List<Item> items){
    //modify the items
    return;
}

返回 void 是一个好的设计,还是只返回列表更好?

4

5 回答 5

4

查看 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 保持不变。这是一种更实用的风格。它也很“流畅”。但它是以更多内存为代价的,因为您分配了一个新列表。

于 2013-01-10T01:50:24.583 回答
1

当然。如果没有什么可返回,则返回类型为void. 您也不需要明确的return;声明。只是让执行从函数的底部掉下来。

public void doSomeWork(List<Item> items){
    //modify the items
}

问题归结为你是否有一个有意义的返回值。不这样做完全没问题。

于 2013-01-10T01:43:33.150 回答
1

如果不返回任何东西在语义上是有意义的,那么不返回任何东西是完全可以的。

于 2013-01-10T01:44:14.600 回答
0

即使它是无效的,如果您需要在某些时候退出方法,您可以使用 return;。否则不需要这样做。

public void doSomeWork(List<Item> items){
   if(some condition){
   return;
   }
    // Do my work
 }
于 2013-01-10T01:45:52.353 回答
0

有时方法不需要返回值。它的所有工作都只是在内部完成,没有任何迹象表明真的需要出去。

这是一种很好的设计实践,尤其是具有诸如设置器和init()方法之类的功能。这些都不需要向调用它的人返回值以指示任何内容。

于 2013-01-10T01:51:46.787 回答