Являются ли анонимные классы плохой идеей? - PullRequest
8 голосов
/ 06 ноября 2008

После их использования я не могу не чувствовать, что обручи, через которые вы вынуждены прыгать при использовании анонимных классов, не стоят этого.

Вы получаете final повсюду, и независимо от того, какой код труднее читать, чем если бы вы использовали хорошо названный внутренний класс.

Так в чем преимущества их использования? Я должно быть что-то упустил.

Ответы [ 5 ]

13 голосов
/ 06 ноября 2008

Преимущество в том, что это реализация замыканий. Это неуклюже, но это лучшее, что у нас есть на Java на данный момент. Другими словами, вам не нужно создавать новый класс просто для того, чтобы сохранить какое-то состояние, которое вы уже получили в качестве локальной переменной.

У меня есть статья, сравнивающая закрытия C # и Java , и почему они полезны в первую очередь, что может помочь.

4 голосов
/ 06 ноября 2008

Ну, я обычно использую его, только когда мне нужна реализация интерфейса для одной цели (и интерфейса с небольшим количеством функций или кода, потому что это очень быстро, некрасиво) ... как в следующем примере:

this.addListener(new IListener(){
    public void listen() {...}
});
1 голос
/ 04 сентября 2013

Аномные классы могут быть полезны. Но то, что я часто видел, было бесполезно. Многие анонимные классы были слишком большими и снижали читабельность. Некоторые эксперты используют много идентичных анонимных классов. Нет строгого правила, когда полезно использовать анонимный класс или нет, но есть правила большого пальца:

  1. Большие и сложные классы не должны быть анонимными.

  2. Читаемость класса контейнера должна быть гарантирована.

  3. СУХОЙ - не повторяйся. Не создавайте два идентичных анонимных класса.

  4. Если у вас много неидентичных, но похожих анонимных классов, вам следует определить части этих классов, которые вы можете использовать повторно. Попробуйте использовать шаблон шаблона pattern.

Важно, чтобы качество кода и программного обеспечения сокращало избыточность. «Копирование и вставка» является антипаттерном в программировании, потому что оригинальный фрагмент кода может содержать ошибку. Если кто-то копирует этот фрагмент кода, он дублирует ошибку. Десять недель спустя кто-то еще находит ошибку и исправляет ее, но другая ошибка все еще находится в коде, и требуется еще десять недель, чтобы найти и исправить ее. Ш

1 голос
/ 06 ноября 2008

Я рекомендую вам эту статью , которая показалась мне очень полезной.

Вы говорите, что ключевое слово final встречается повсеместно, но с локальным классом вам все равно нужно передать состояние включающего класса, что также может ухудшить читабельность.

1 голос
/ 06 ноября 2008

Обычно я ограничиваю анонимные классы несколькими строками. Все, что длиннее, скажем, 5, создает именованный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...