![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Royan |
|
|||
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 1 Всего: 15 |
Я не могу понять, что с ним не так, что он стал абстрактным:
http://java.sun.com/j2se/1.4.2/docs/api/ja...cusAdapter.html В моем понимании абстрактным классом называется тот класс, объект которого, нельзя получить. То есть что-то препятствует тому, чтобы из класса получился объект. Здесь же есть два метода, оба заимплементированы. Так почему он абстрактный? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Гм... Действительно, абстрактный... Фигня какая-то. Два имплементированных метода, наследуется от Object...
Адаптер не должен быть абстрактным, это противоречит его основному назначению - пустой реализации интерфейсов. Может, баг?.. Добавлено @ 17:40 Посмотрел - оказывается, все адаптеры абстрактны... Зачем это? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 1 Всего: 144 |
Идея адаптеров обработчиков оконных событий возникла вот каким образом. Что такое листенер - надеюсь, объяснять не надо? Так вот, листенеры определены в виде интерфейсов; каждый тип листенера объявляет ряд характерных для этого типа методов для реакции на определенные события. У некоторых листенеров таких методов меньше, у других - больше. Например, у MouseListener их пять, у WindowListener - семь, и т. д.
Но тебе, допустим, не нужно слушать все WindowEvent'ы: тебя интересует только windowClosing(WindowEvent e). Но поскольку интерфейс листенера - общий для всех слушателей WindowEvent, то тебе таки придется имплементировать его весь, и потом долго заниматься мартышкиным трудом: писать заглушки (пустые методы) для тех методов, которые тебя не интересуют. Так вот, товарищи из Sun'а весь этот мартышкин труд за тебя уже проделали - написали абстрактные классы, состоящие из пустых определений методов, и назвали их адаптерами. Так что тебе только остается унаследовать от нужного тебе адаптера и переопределить интересующий тебя метод. А аббстрактными они объявлены для того, чтобы ты ненароком или по незнанию не смог их инстанциировать - потому что это явно не то. чего ты хочешь добиться ![]() |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Мне кажется, что все немного проще - создать адаптер, и не переопределить ни одного метода - бессмысленно. Поэтому и объявили его abstract, хотя у него есть все, чтобы быть обычным классом.
То же самое, что сказал Stampede, только покороче ![]() -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 1 Всего: 144 |
Нет, не то же самое. Ты неправильно толкуешь значение слова адаптер. Ты думаешь, что адаптер - это и есть обработчик события. Нет, обработчик события в терминологии AWT (и не только) - это handler. А адаптер - он именно адаптер: переходник, приспособа, согласователь. Как, например, DC блок питания или видеокассета-переходник, в которую можно засовывать маленькую кассету от камеры. Метафора особенно заметная, и ты испытываешь благодарность за ее существование, когда в потоке кодирования объявляешь анонимный класс, и тебе достаточно переопределить один-два метода и все, ты уже идешь дальше. Так штааа... ![]() |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
А разве нет? Мы же регистрируем его именно как класс-обработчик. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Не его, а класс, который от него наследует. -------------------- |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Ну да, просто лень было писать.
![]() -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 1 Всего: 144 |
На уровне абстракций, каковыми являются высокоуровневые понятия Listener (интерфейс), Handler (наша конкретная реализация слушателя == обработчик) и Adapter (вспомогательный класс-посредник), в семантическом плане мы делаем следующее: регистрируем наш Handler в качестве Listener'а некоего гуйного объекта, используя (исключительно удобства ради) переходник Adapter соответствующего типа. Все, Lamer George, пожалуйста, больше с этим вопросом ко мне не лезь, а то я разочаруюсь в твоих перцептивных способностях. Шутка ли, три раза подряд объяснить одно и то же разными словами. А если хочешь плюс поставить, то так просто и скажи ![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Вообще по определению адаптер - это то, что преобразовывает интерфейс (класса или интерфейса). А какой он должен быть - абстрактный или конкретный - дело разработчика.
-------------------- |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Не вопрос. По сумме нескольких постов заслужил. ![]() Оффтоп: Понял я, что мы друг друга не поймем -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 1 Всего: 144 |
Ты здравый чувак, я здравый чувак - поймем ![]() -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Вот в этой части:
Я думаю, что В ДАННОМ СЛУЧАЕ класс, расширяющий адаптер, как раз и является handler'ом. Но я уже понял твою мысль, так что можешь дальше не разжевывать. Это сообщение отредактировал(а) Lamer George - 14.5.2005, 14:07 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |