我使用下面的代碼:爲什麼我需要將變量轉換爲@Override [inner class]方法中的最終數組?
public void addConditions(){
final String arriveHourse, departHourse, arriveMinutes, departMinutes;
TimePickerDialog.OnTimeSetListener departOnTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHours, int selectedMinutes) {
departHourse = String.valueOf(selectedHours);
departMinutes = String.valueOf(selectedMinutes);
}
};
...
}
爲什麼IDE讓我轉變departHourse
成最終陣列?
爲什麼發生這種情況,我該如何避免這種情況?
另外,如果我搬到外面可變類,它的工作,如:
String arriveHourse, departHourse, arriveMinutes, departMinutes;
public void addConditions(){
TimePickerDialog.OnTimeSetListener departOnTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHours, int selectedMinutes) {
departHourse = String.valueOf(selectedHours);
departMinutes = String.valueOf(selectedMinutes);
}
};
...
}
如果我想更改內部匿名類中的變量並將其返回,該怎麼辦?使用改進API來消耗REST API時,我通常會遇到這個問題。 –
@KavachChandra:你不能那樣做。 Java語言規則明確地阻止您在匿名內部類中使用非最終變量。我已經向您展示了兩種解決方法,第三種方法是不使用匿名內部類 - 創建* named *類並在其中聲明一個字段。 –
有的博客說,那是由於編譯器本身?真的嗎? –