Обычно определение класса, создание экземпляра и последующее использование этого экземпляра выполняется отдельно:
class MyListener extends OnClickListener {
public void onClick(View v) {
// my onClick code goes here
}
}
MyListener foo = new MyListener();
button.setOnClickListener(foo);
Но иногда вам нужен подкласс, экземпляр которого вы создадите сразу один раз, что часто имеет место для обработчиков событий. Его удобно определить и создать вместе, используя анонимный (внутренний) класс:
OnClickListener foo =
new OnClickListener() {
public void onClick(View v) {
// my onClick code goes here
}
};
button.setOnClickListener(foo);
Но поскольку foo
используется только один раз, мы можем сделать еще один шаг и исключить локальную переменную foo
, поэтому:
button.setOnClickListener(foo);
можно отформатировать как:
button.setOnClickListener(
foo
);
подставьте в значение foo
:
button.setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
// my onClick code goes here
}
}
);
переформатировал снова без какого-либо большого пробела, чтобы увидеть это, как это часто пишется:
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// my onClick code goes here
}
});
Я думаю, что последний формат ухудшает читабельность. Я форматирую свои анонимные классы аналогично тому, как это происходит в последнем формате - лучшая читаемость (ИМХО) стоит немного лишних пробелов.