Theo JSR-133 đối tượng không thay đổi được chỉ an toàn và không cần đồng bộ hóa. Tuy nhiên, có thể cập nhật giá trị của các trường cuối cùng bằng cách sử dụng sự phản chiếu:Làm thế nào để phản chiếu và bất biến phải làm việc cùng nhau
package com.stackoverflow;
import java.lang.reflect.Field;
public class WhatsGoingOn {
static class Immutable {
private final int value;
public Immutable(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
final Immutable immutable = new Immutable(Integer.MIN_VALUE);
final Field f = Immutable.class.getDeclaredField("value");
f.setAccessible(true);
System.out.println(immutable.getValue());
f.set(immutable, Integer.MAX_VALUE);
System.out.println(immutable.getValue());
}
}
Cho số khung (Spring và Hibernate chỉ là một vài) dựa vào sự phản chiếu Tôi tò mò về đặc điểm nào nói về trường hợp này. Ví dụ. nếu tôi đặt trường cập nhật vào khối đồng bộ sẽ đảm bảo khả năng hiển thị trong các chủ đề khác, hoặc giá trị sẽ được lưu trữ trong sổ đăng ký theo thông số kỹ thuật cho cuối cùng.
http://download.oracle.com/otndocs/jcp/memory_model-1.0-pfd-spec-oth-JSpec/