必须返回多个对象是不好的设计标志吗?

时间:2010-11-10 03:16:59

标签: immutability

有时我在尝试使用不可变对象时遇到Java中的这种情况。在Java中,方法不能返回多个对象,例如return a, b, c。返回不同类型的对象数组或包装器对象会使代码看起来很难看。因此,我必须将可变对象传递给方法,并让它更改这些对象的状态。所以一般来说,在编程中,必须返回多个对象,这是一个糟糕设计的标志?

4 个答案:

答案 0 :(得分:3)

并非总是如此。返回某种“OperationResult”对象并不罕见,该对象包含有关所执行操作的所有信息。

但是,我肯定会反对传递对象并填充其成员的方法。那闻起来很糟糕。

答案 1 :(得分:2)

不,我不相信。能够在Python中返回元组实际上非常方便。

在你可以使用其中一个可能的返回值来指示别的东西的情况下(比如字符串/空指针或长度/负数),只返回一件事就可以了。

但是如果你需要使用全范围的可能会返回错误,你必须找到一些的方法。只要API合同指明发生了什么,我就会发现没有问题,就像你建议的那样。

接口仍然是一个紧密的“管道”,因为没有泄漏(调用者指示可以更改的内容,没有其他调用者使用这些变量)。你的解决方案肯定比使用全局变量的牛仔编码器更好。

答案 2 :(得分:0)

正如其他人所说,这取决于你在做什么,虽然你可以让它返回一个'价值'然后更好。

但是你可以创建一个完整的类,其中包含那些使代码更容易理解的值。

答案 3 :(得分:0)

在Java中,返回你所谓的wrapper object似乎是一种常见的做法,特别是Transfer Object模式,但即使是有意义的本地调用。

修改参数也是一种非常常见的技术。您可以在JDK中看到示例,例如Collections.sort(List list)InputStream.read(byte[])

在处理持久对象时也很常见,例如下面的代码片段

public void updateTrackingFields(Trackable trackable, String user) {
  trackable.setChangedBy(user);
  trackable.setChangedTime(System.currentTimeMillis());
}

所以,我相信可能会有比这两个更差的设计决策。

编辑:添加了持久对象示例。