我一直在阅读Effective Java,我发现这样的声明不仅可以共享不可变对象,还可以共享它们的内部结构.但是,我正在努力弄清楚这是什么意思,一个例子肯定会有所帮助,因为书中没有给出任何例子.我已经知道无法更改不可变对象,例如a String.
例如,如果你有一个班级
public class Vector2d {
private final BigDecimal a;
private final BigDecimal b;
}
Run Code Online (Sandbox Code Playgroud)
然后a和b是那类的"内部".因为这是BigDecimal他们不可变的实例.如果您实现了类似的操作setBToZero(),则只需重用您的实例,a而不必重新创建新实例.例如
public Vector2d setBToZero() {
return new Vector2d(a, 0);
}
Run Code Online (Sandbox Code Playgroud)
您共享内部a,因为它是不可变的,您不必担心共享状态的更改.当涉及到大型物体时,这尤其有用.如果使用接口,则只能使用代理对象来实现某些操作.
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |