为什么范围适用于作为参数创建的类?

时间:2011-07-25 00:48:28

标签: android scope

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 个答案:

答案 0 :(得分:2)

在这种情况下查看JLS可能有助于理解本地类的作用域。

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

以下是回答您问题的具体段落 -

由块(第14.2节)直接包含的本地类的范围是直接封闭块的其余部分,包括它自己的类声明。直接包含在其中的本地类的范围switch block语句组(第14.11节)是直接包含的switch block语句组的其余部分,包括它自己的类声明。

编辑 -

意识到该解释具体指的是本地类本身的范围,而不是本地类中封闭成员的范围。这是一个更好的链接 -

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

本地课程有以下有趣的功能:

与成员类一样,本地类与包含实例相关联,并且可以访问包含类的任何成员,包括私有成员。

除了访问包含类定义的字段之外,本地类还可以访问本地方法定义范围内并声明为final的任何局部变量,方法参数或异常参数。 < / p>