2011-07-25 31 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節)中立即包含的本地類的範圍是立即封閉的開關塊語句組的其餘部分,包括其自己的類聲明。

編輯 -

意識到,這種解釋特指局部類本身,而不是在本地類內的包封件的範圍的範圍。這裏是一個更好的鏈接 -

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

局部類有以下有趣的功能:

狀件類,地方類是用含實例相關聯,並且可以訪問任何成員,包括私有成員,包含類的。

除了訪問由包含類定義的字段之外,本地類還可以訪問本地方法定義範圍內並聲明爲final的任何局部變量,方法參數或異常參數。

相關問題