0

在 Java 中,可以强制方法按值(而不是按引用)返回吗?

例如:

public Rect getBounds() {
    return bounds; //TODO: Return bounds by value so users can't change edit it.
}

在这里,我不妨将界限公之于众。如果要通过引用传递它,似乎没有理由创建一个函数来返回某些东西。

我的另一个选择是创建几个方法以 1×1 的方式返回边界的特定成员,但我宁愿不这样做。

4

2 回答 2

5

不,这就是 API 经常返回防御性副本不可修改的包装器等的原因。

这些副本和/或包装器(帮助)防止用户修改实例数据。

如果正确的行为依赖于实例对实例数据具有完全且唯一的控制权,则实例有责任通过不向客户提供任何可以用来破坏该合同的东西来确保该行为。

于 2012-09-09T02:59:31.640 回答
3

Rect通过使其字段成为最终字段,在构造函数中分配它们的值而不创建 setter 方法,使其不可变。不可变对象有很多好处,线程安全就是其中之一。

于 2012-09-09T03:04:26.057 回答