Зачем объявлять ссылку на экземпляр класса final как final? - PullRequest
6 голосов
/ 06 июля 2011

Что означает вторая строка:

public final class A {}
final A obj1=new A();

Если A уже неизменен, почему кто-то может хотеть сделать obj1 финальным?(просто чтобы привязаться к уникальной ссылке на память?).

Ответы [ 2 ]

15 голосов
/ 06 июля 2011

final в первой строке означает, что объект закрыт для расширения ... то есть вы не можете создать его подкласс.

2 голосов
/ 06 июля 2011

Во-первых, A не является неизменным с вашей стороны, просто объявите его final.

Затем окончательные переменные не могут быть изменены.Если obj1 является полем, это обеспечивает изменчивость (в отличие от final class).

Если это локальная переменная, это означает, что вы можете безопасно использовать ее в анонимных классах (иначе компилятор не может быть уверен, что он не получит изменения иногда до / во время выполнения тела анонимного класса)

...