2011-12-31 3 views
2

Действительно раздражает, когда я хочу реализовать интерфейс для простого WindowListener, но единственный способ выполнить эту работу - реализовать все методы, чтобы оставить все, кроме одного бездействия. Выглядит очень уродливо и избегаемо ..Избегайте абстрактных методов bodyless при реализации интерфейса - java

Есть ли какой-либо шаблон дизайна, который может избежать реализаций в этом типе?

Я пробовал шаблон стратегии/политики, но я просто закончил тем же методом bodyless, за исключением большего количества способов ООП.

ответ

1

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

+1

В случае «WindowListener» это класс «WindowAdapter» – Robin

+0

Спасибо, я не обращал внимания на рамки, о которых они спрашивали. –

+0

Как я просматриваю документы более подробно, я это замечаю. –

6

Используйте WindowAdapter и переопределите только те методы, которые вам нужны. Подробнее об этом here.

+1

Спасибо, это было на кончике моего мозга! Серьезно, я помню, узнав об этом некоторое время назад. –

+0

Хм, здесь возникает нехватка мультинаследования. Я расширяю JFrame, поэтому теперь я должен объявить фиктивный класс только для расширения WindowAdapter и передать его в addWindowListener(), который находится в моем основном классе. Я мог бы передать это вместо этого и избегать фиктивного класса, который был бы в порядке, если бы я мог расширять как JFrame, так и WindowAdapater. –

+1

@Sam Ismail: Обычно здесь используются анонимные классы, что приводит к относительно небольшим накладным расходам кода. –

2

В API Документов WindowListener есть класс WindowAdapter упоминается как реализации интерфейса:

Методы в этом классе являются пустыми. Этот класс существует как удобство для создания объектов-слушателей.

+0

Спасибо, я не понимал, что –

Смежные вопросы