Почему область работает с классами, созданными в качестве параметров? - PullRequest
2 голосов
/ 25 июля 2011
final TextView dob = (TextView) findViewById(R.id.TextView_DOB);
DatePickerDialog dateDialog = new DatePickerDialog(this,
        new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                        int dayOfMonth) {
                    Time dateOfBirth = new Time();
                    dateOfBirth.set(dayofMonth, monthOfYear, year);
                    long dtDob = dateOfBirth.toMillis(true);
                    dob.setText(DateFormat("MMMM dd yyyy", dtDob));
                    Editor editor = mGameSettings.edit();
                    editor.putLong(GAME_PREFERENCES_DOB, dtDob);
                    editor.commit();

                }
            },0,0,0);
return dateDialog;

Здесь, как класс, созданный на лету внутри параметров DatePickerDialog, может видеть «dob»?Конечно, у этого нет возможности для этого?

1 Ответ

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

В этом случае может быть полезно взглянуть на JLS, чтобы понять, как ограничены локальные классы.

http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.3

Вот конкретный абзац, который отвечает на ваш вопрос -

Область локального класса, непосредственно заключенного в блок (§14.2), является остальной частью непосредственно включающего блока, включая его собственное объявление класса. Область локального класса, немедленно заключенного вгруппа операторов блока переключателя (§14.11) является остальной частью непосредственно включенной группы операторов блока переключателя, включая ее собственное объявление класса.

EDIT -

Понял, что это объяснение конкретно относится кобласть самого локального класса, а не область элементов, входящих в локальный класс.Вот лучшая ссылка -

http://docstore.mik.ua/orelly/java-ent/jnut/ch03_11.htm

Локальные классы имеют следующие интересные особенности:

Как и классы-члены, локальные классы связаны с содержащим экземпляром, иможет получить доступ к любым членам, включая закрытые члены, содержащего класса.

В дополнение к доступу к полям, определенным содержащим классом, локальные классы могут обращаться к любым локальным переменным, параметрам метода или параметрам исключения, которые являютсяв области определения локального метода и объявлено окончательным.

...