- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class Point {
private double x;
private double y;
Point (double x, double y)
{ this.x = x; this.y = y; }
double getX() { return x; }
double getY() { return y; } }
上面类中的对象是不可变的吗?解释。我很困惑因为没有 setter ,因此没有任何东西可以修改对象但它没有应该包含的最终变量或最终类。
如果类被扩展,它可能会添加额外的不可变的字段,或者可能会覆盖方法以每次返回不同的值。这不是使得类不是不可变的吗?
最佳答案
If the class gets extended, ... the methods could be overridden to return a different value each time. Doesn't this make the class not immutable?
你的问题很微妙。如果某些类 MutPoint 扩展了 Point
并重写了 getX()
和 getY()
方法以返回非常量值,则不会改变Point
类本身。 Point
的实例实际上是不可变的,但调用者可以将 MutPoint
对象传递给需要 Point< 的您的方法。/
参数。然后会发生什么?取决于你如何编写代码。如果调用者给您一个类似 Point 的对象,然后随后更改其“值”,那么您的代码可能会表现得很糟糕。
如果使用 Point
对象的代码要求它们永远不会更改,那么您可能需要声明整个类 final
public final class Point { ... }
这样,您的客户端将不允许重写该类,并且不允许使用除实际 Point
实例以外的任何内容调用您的方法。
关于java - 以下类中的对象是不可变的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055772/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!