Sobes.tech
Junior — Middle

Czy można zmienić wartość zmiennej zadeklarowanej jako effectively final wewnątrz obiektu?

sobes.tech AI

Odpowiedź od AI

W Javie termin "effectively final" oznacza, że zmienna nie została zmieniona po inicjalizacji, choć nie jest jawnie zadeklarowana jako final. Jest to ważne na przykład przy używaniu takich zmiennych w wyrażeniach lambda lub anonimowych klasach.

Jeśli zmienna jest zadeklarowana jako effectively final, nie można zmienić jej wartości — próba przypisania nowej wartości spowoduje błąd kompilacji.

Jednak jeśli ta zmienna odwołuje się do obiektu, stan samego obiektu może być zmieniany, ponieważ zmienia się nie odwołanie, lecz wewnętrzne pola obiektu. Na przykład:

final List<String> list = new ArrayList<>();
list.add("nowy element");  // To jest dozwolone

// list = new ArrayList<>();  // Błąd, nie można zmienić odwołania

W związku z tym, wartość zmiennej (odwołanie) nie może być zmieniona, ale zawartość obiektu, na który się odwołuje, może być modyfikowana.