有时我在尝试使用不可变对象时遇到Java中的这种情况。在Java中,方法不能返回多个对象,例如return a, b, c
。返回不同类型的对象数组或包装器对象会使代码看起来很难看。因此,我必须将可变对象传递给方法,并让它更改这些对象的状态。所以一般来说,在编程中,必须返回多个对象,这是一个糟糕设计的标志?
答案 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());
}
所以,我相信可能会有比这两个更差的设计决策。
编辑:添加了持久对象示例。