Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите понять код. 
:(
    Опции темы
olegrolik
Дата 29.6.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Есть файл Bean.java:
Код

package mypackage;
import mypackage.event.*;
import java.util.*;

public class Bean {

   // some code here 
       
    protected void notifyMessageListeners(MessageEvent event) throws Exception {
        for (Enumeration e = messageListeners.elements(); e.hasMoreElements();) {
            MessageListener listener = (MessageListener)e.nextElement();
            listener.messageProcessed(event);
         }
    }
}


И интерфейс MessageListener.java:

Код

package mypackege.event;

public interface MessageListener extends java.util.EventListener {    
     public void messageProcessed(MessageEvent e);
}

В файле Bean.java в методе notifyMessageListeners создаётся экземпляр интерфейса MessageListener listener.
Далее listener выполняет свой метод message.Processed(event). 
Скажите, разве может экземпляр интерфейса выполнять свой метод (ведь он не определён)?

Искал определение этого метода в других файлах проекта, нигде не нашёл smile 
Спасибо.
 
PM MAIL   Вверх
Maksym
  Дата 29.6.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Цитата(olegrolik @  29.6.2007,  11:54 Найти цитируемый пост)
В файле Bean.java в методе notifyMessageListeners создаётся экземпляр интерфейса MessageListener listener.

Где ты такое увидел? Здесь MessageListener listener = (MessageListener)e.nextElement();
 ничего не создается. Очевидно, в messageListeners лежат реализации MessageListener интерфеса, в которых необходимый метод реализован.
Цитата(olegrolik @  29.6.2007,  11:54 Найти цитируемый пост)
Искал определение этого метода в других файлах проекта, нигде не нашёл

Должен быть класс, реализующий MessageListener, экземпляры которого помещаются в messageListeners. Найди код его (messageListeners) заполнения и все станет понятно.


Это сообщение отредактировал(а) Maksym - 29.6.2007, 12:11
PM MAIL   Вверх
olegrolik
Дата 29.6.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(Maksym @ 29.6.2007,  12:09)
Очевидно, в messageListeners лежат реализации MessageListener интерфеса, в которых необходимый метод реализован.

Это не так.
messageListeners - это экземпляр класса Vector:
Код

protected Vector messageListeners = new Vector();


=============================================

Цитата(Maksym @ 29.6.2007,  12:09)
 Найди код его (messageListeners) заполнения и все станет понятно.


public void addMessageListener(MessageListener listener) {
        messageListeners.add(listener);
}
Это оно?
Не пойму о каком заполнении идёт речь.

==============================================

Цитата(Maksym @ 29.6.2007,  12:09)
 Должен быть класс, реализующий MessageListener, экземпляры которого помещаются в messageListeners.

Т.е. должно быть что-то вроде :
Код

class SomeClass implements MessageListener {
        public void messageProcessed(MessageEvent e){ 
                 //some code
        }
}

?
PM MAIL   Вверх
fixxer
Дата 29.6.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



С помощью метода addMessageListener(MessageListener listener) в Vector messageListeners попадут экземпляры классов, реализующих интерфейс MessageListener. Что еще не понятно?


--------------------
user posted image
PM MAIL ICQ   Вверх
olegrolik
Дата 29.6.2007, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



fixxer, непонятно, то, что ИМХО метод messageProcessed интерфейса MessageListener не реализован и при этом ещё используется (см. первый пост топика).
PM MAIL   Вверх
Maksym
Дата 29.6.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Цитата(olegrolik @  29.6.2007,  14:14 Найти цитируемый пост)
Это не так.

как же не так, когда именно так smile не важно Vector или не Vector, важно, что он хранит. А хранит он реализации MessageListener интерфейса.
Цитата(olegrolik @  29.6.2007,  14:14 Найти цитируемый пост)
Т.е. должно быть что-то вроде :
class SomeClass implements MessageListener {
        public void messageProcessed(MessageEvent e){ 
                 //some code
        }
}

вот-вот. где то еще должно повстречаться что-то типа ...addMessageListener(new SomeClass())

Это стандартная для java реализация оповещения заинтересованных объектов о событии. Если не знаком -- почитай Observer паттерн.

Добавлено через 3 минуты и 17 секунд
olegrolik
Цитата(olegrolik @  29.6.2007,  14:47 Найти цитируемый пост)
fixxer, непонятно, то, что ИМХО метод messageProcessed интерфейса MessageListener не реализован и при этом ещё используется (см. первый пост топика). 

В первом посте топика происходит кастинг того что лежит в векторе к интерфейсу MessageListener, а лежит там объект конкретного класса, который реализует этот интерфейс.
Найди в коде место, в котором вызывается addMessageListener(...), посмотри, что конкретно туда кладется и все станет на свои места.
PM MAIL   Вверх
olegrolik
Дата 29.6.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Maksym, спасибо за участие. В принципе всё тут ясно. Проблема в том, что я не мог найти (и до сих пор не нашёл) реализацию интерфейса MessageListener.
И спасибо за ссылку. Поможет разобраться в структуре кода (когда найду реализацию  smile  )
Как найду ответ, скажу в чём дело и помечу тему, как решённую. 
Всем спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0761 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.