在 Activity 中使用外部類實現 OnItemSelectedListener 報錯,改為內部類則正常。
Java 編譯器**自上而下**解析類文件。若在字段初始化或構造函數中 `new MyListener()`,但 `MyListener` 類定義在**後面**,編譯器尚未識別該類型,報錯「cannot find symbol」。
public class MyActivity extends Activity {
private MyListener listener = new MyListener(); // 此處用到 MyListener
// ... 其他代碼 ...
class MyListener implements OnItemSelectedListener { // 定義在後面
// ...
}
}
public class MyActivity extends Activity {
class MyListener implements OnItemSelectedListener { ... } // 先定義
private MyListener listener = new MyListener(); // 再使用
}
static class MyListener implements OnItemSelectedListener { ... }
private MyListener listener;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listener = new MyListener(); // 此時類已加載完成
}
static 內部類防止內存洩漏。