DZone refcard zatytułowanych „Core Java Concurrency” stwierdza:Java: Ostateczne zamrożenie pole na obiekcie osiągalny z pól końcowych
Po ustawieniu wartości końcowy pole nie może być zmieniony. Oznaczenie pola odniesienia obiektu jako ostatecznego nie uniemożliwia późniejszej zamiany obiektów przywołanych z tego pola. W przypadku przykładu , końcowe pole ArrayList nie może zostać zmienione na inną ArrayList , ale obiekty mogą być dodawane lub usuwane w instancji listy.
i
Końcowy zamrażania pole zawiera nie tylko końcowe pól w obiektu, ale również wszystkie obiekty oddalone od tych ostatnich dziedzinach.
Nie do końca wiadomo o drugim stwierdzeniu. Czy to oznacza, że jeśli mam ostatnie pole w klasie A typu B, które z kolei ma końcowe pole typu Integer, to ostatnie zatrzymanie pola dla instancji klasy A kończy się dopiero po ostatecznym zamrożeniu pola dla b.c
stało się?
public class A{
public final B b = new B();
}
public class B{
public final Integer c = 10;
}
Dzięki Alex za szczegółową odpowiedź. Naprawdę doceniony. BTW Bardzo podobała mi się również karta Refcard. –
>> ... ostateczne zamrożenie pola w tym przypadku oznacza, że gdy tworzysz instancję A i bezpiecznie ją publikujesz, inne obiekty nigdy nie zobaczą niezainicjowanej wartości dla b lub c << - nie, właściwie "bezpieczne publikowanie" nie jest Wymagane tutaj. Jedyny wymóg: "to" nie może uciec od konstruktora. – Male
@Alex Miller "Ostateczne zamrożenie pola" jest oficjalnym terminem? – nish1013