[英]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.