使用void返回类型定义方法是一个很好的设计实践吗?

时间:2013-01-10 01:42:07

标签: java

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

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

返回无效是一个好设计,还是我最好只返回列表?

5 个答案:

答案 0 :(得分: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的副作用。如果客户不了解它,可能会给客户带来不愉快的惊喜。

第二种方式意味着传入List并返回修改后的版本:

public List<Item> doSomeWork(List<Item> items){
    List<Item> modified = new ArrayList<Item>(items);
    // modify the returned List
    return modified;
}

客户没有这样的意外:传入的List仍未修改。这是一种更实用的风格。它也是“流利的”。但是,由于您分配了一个新的List,因此需要更多内存。

答案 1 :(得分:1)

不确定。如果没有要返回的内容,则返回类型为void。您也不需要明确的return;语句。只是让执行从函数的底部掉下来。

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

问题归结为你是否有一个有意义的回报值。完全没有。

答案 2 :(得分:1)

如果在语义上不返回任何内容,那么不返回任何内容都是完全正确的。

答案 3 :(得分:0)

即使它的空白,如果你需要在某个时候退出方法,你可以使用return;。否则无需这样做。

public void doSomeWork(List<Item> items){
   if(some condition){
   return;
   }
    // Do my work
 }

答案 4 :(得分:0)

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

这是一个很好的设计实践,尤其是使用setter和init()方法等功能。这些都不需要将值返回给任何调用它来指示任何内容的人。