2011-07-25 7 views
2
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」を参照できますか?確かにその範囲はありませんか?スコープがパラメータとして作成されたクラスで動作するのはなぜですか?

答えて

2

この場合の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

ローカルクラスは、以下の興味深い機能を持っている:ローカルクラスを含むインスタンスに関連付けられている、メンバークラスと同様

、およびプライベートメンバーを含む任意のメンバーを、アクセスすることができます、そのクラスを含む。

ローカルクラスは、それを含むクラスによって定義されたフィールドにアクセスするだけでなく、ローカルメソッド定義のスコープ内にあり、final宣言されているローカル変数、メソッドパラメータ、または例外パラメータにアクセスできます。

関連する問題