Я склонен использовать анонимные внутренние классы в ситуациях, когда мне не нужно иметь полноценный класс просто для выполнения какой-либо задачи. Например, если я хочу реализовать ActionListener
или Runnable
, но я не думаю, что наличие внутреннего класса было бы необходимым. Например, для запуска простого Thread
использование анонимного внутреннего класса может быть более читабельным:
public void someMethod()
{
new Thread(new Runnable() {
public void run()
{
// do stuff
}
}).start();
}
В некоторых случаях, например, в приведенном выше примере, это может улучшить читаемость, особенно для одноразовых задач, поскольку весь код, который должен быть выполнен, написан в одном месте Использование внутреннего класса «делокализует» код:
public void someMethod()
{
new Thread(new MyRunnable()).start();
}
// ... several methods down ... //
class MyRunnable implements Runnable
{
public void run()
{
// do stuff
}
}
Однако, тем не менее, если будут случаи, когда одно и то же будет повторяться, это действительно должен быть отдельный класс, будь то обычный класс или внутренний класс.
Я склонен использовать анонимные внутренние классы в программах, где я просто пробую что-то, вместо того, чтобы использовать их в качестве центральной функции реального приложения.