[英]Is It Immutable Class?
这下课是一成不变的吗?
class Immutable {
private int x;
Immutable(int value) {
this.x = value;
}
public int getX(){
return x;
}
}
类不是最终的,因为子类看不到任何成员
实例变量x不是最终变量,因为没有设置方法。
此类在不添加任何代码的情况下是否有可能打破不可变功能的约定?
该类实际上是不可变的。
但是您仍然可以使用反射来设置变量x的值,因为该变量不是最终变量。
Immutable
类是不可变的。
但是,可以声明其实例是可变的Immutable
的子类。 确实,防止这种情况的唯一方法是使此类成为final
...或将其构造函数设为私有。
您可能会((我会)认为)可变的Immutable
子类违反了Immutable
的约定。
使用反射更改x
值的方法违反了规则。 Java规范说未指定执行此操作的应用程序的行为。 (当然,它打破了JLS说允许JIT编译器进行的各种假设。)
一个明智的开发人员不会做这种事情,会轻视别人做某事的可能性,并且会说尽管某些疯子可能会改变它,但Immutable
是不可变的。
是的,在我看来,这是一成不变的。
因为您有一个只能在构造函数中设置的私有字段,并且该类中的唯一方法是getter,所以该字段不能再被修改,并且该类可以说是不可变的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.