Android 为什么作用域对作为参数创建的类起作用?

Android 为什么作用域对作为参数创建的类起作用?,android,scope,Android,Scope,在这里,在DatePickerDialog的参数中动态创建的类如何看到“dob”?当然它没有这样的作用域?在这种情况下,查看JLS可能有助于理解本地类是如何作用域的 下面是回答你问题的具体段落-- 直接由块(§14.2)包围的本地类的范围是直接包围块的其余部分,包括其自身的类声明。直接由开关块语句组(§14.11)包围的本地类的范围是直接包围开关块语句组的其余部分,包括它自己的类声明 编辑-- 认识到该解释具体指的是本地类本身的范围,而不是本地类中封闭成员的范围。这里有一个更好的链接-- 本

在这里,在DatePickerDialog的参数中动态创建的类如何看到“dob”?当然它没有这样的作用域?

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

下面是回答你问题的具体段落--

直接由块(§14.2)包围的本地类的范围是直接包围块的其余部分,包括其自身的类声明。直接由开关块语句组(§14.11)包围的本地类的范围是直接包围开关块语句组的其余部分,包括它自己的类声明

编辑--

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

本地类具有以下有趣的特性:

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

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

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;