Я занимаюсь рефакторингом класса с общедоступным интерфейсом, и размышления об использовании заставили меня спросить:
В чем разница между объявлением следующего в более крупном классе (в качестве переменной экземпляра):
private final OnClickListener mButtonOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
//some codes
}
};
vs объявить как анонимный внутренний класс следующим образом (на лету):
private void someFunctionInClass() {
someOtherFunctionThatTakesAnOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//some codes
}
});
}
В частности, первый по-прежнему считается анонимным внутренним классом? Я прочитал в этом ответе, что анонимный внутренний класс
- это тот, который создается И определяется в теле метода другого класса
Первый пример, который я привел, создается и определяется в теле другого класса, но не в методе другого класса, как второй. Это все еще анонимный внутренний класс? Кроме того, какова общепринятая практика по отношению друг к другу? Является ли более эффективным объявить (как я думаю, все еще) анонимный внутренний класс в качестве переменной экземпляра, потому что новые объекты не нужно воссоздавать?