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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сообщение как произвольный объект 
:(
    Опции темы
Hogan
Дата 16.5.2007, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При написании чата передаваемое сообщение должно быть произвольным объектом и имплементится от некоторого интерфейса. Как в реализации этого интерфеса задать тип сообщения (например  - строка)?
PM MAIL   Вверх
Maksym
Дата 16.5.2007, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



Hogan
Проверка типа в runtime не подходит?
PM MAIL   Вверх
Hogan
Дата 16.5.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не понял. Можно поподробнее.
Вроде мне не проверить тип надо, а задать его..
PM MAIL   Вверх
Maksym
Дата 16.5.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



как твое сообщение выглядит? приведи код.
Я имел в виду, что в коде у тебя может быть написано Object, но передаешь то ты всегда экземпляр конкретного класса потомка и можешь через instanceof проверить что это за класс (если знаешь чего ждать), или через getClass() (универсальный способ).

Добавлено через 1 минуту и 42 секунды
Цитата(Hogan @  16.5.2007,  23:46 Найти цитируемый пост)
реализации этого интерфеса

Вчитался в твое сообщение и подумал, что возможно не правильно тебя понял.
Все таки нужен код..
PM MAIL   Вверх
Hogan
Дата 17.5.2007, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

public interface Message {
  Object typeOfMessage();
}



Насчет Object в интерфейсе не уверен.
Нужно как-то теперь описать класс TextMessage c методом typeOfMessage() (пока не понял, что он должен возвращать - Object поставил наугад) так, чтобы в основном коде при создании объекта типа TextMessage мы имели просто стринговый объект.

ЗЫ. Это все нужно для того, чтобы максимально абстрагироваться от типа сообщений (строки, апельсины, файлы ит.д)
PM MAIL   Вверх
w1nd
Дата 17.5.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Код
public interface Message {
    Class typeOfMessage();
    Object messageBody();
}



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


Новичок



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

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



А что должны делать методы Class typeOfMessage() и  Object messageBody()  ??
PM MAIL   Вверх
w1nd
Дата 17.5.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(Hogan @  17.5.2007,  00:17 Найти цитируемый пост)
А что должны делать методы Class typeOfMessage() и  Object messageBody()  ??

Второй возвращает сообщение, а первый - его тип.


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


Новичок



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

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



Первый раз такое делаю..с трудом шарю  smile 
Можно примерчик небольшой
PM MAIL   Вверх
nornad
Дата 17.5.2007, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Код

public class StringMessage implements Message
{
  private String body;

  public Class typeOfMessage() {
    return String.class;
  }
  public Object messageBody() {
    return body;
  }
}

Остальные методы (установку тела, конструктор и ещё что, если надо), думаю, ты и сам легко напишешь. smile 

А использовать можно будет так:
Код

Message message;
...
if ( String.class == message.typeOfMessage() ) {
  System.out.println( (String) message.messageBody() );
}



--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Maksym
Дата 17.5.2007, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



А почему бы без всякого typeOfMessage() не сделать:
Код

Object body = message.messageBody();
if ( body.getClass().equals(String.class) ) {
  System.out.println( (String) message.messageBody() );
}

и не дублировать информацию.
PM MAIL   Вверх
nornad
Дата 17.5.2007, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Потому что, если сообщения простые и работа с ними (в коде) занимает мало места, то можно сделать всего один класс сообщения, который будет хранить не только само сообщение, но и его тип. А возможно и делать какие-то полезные вещи с сообщением. В твоём же случае надо будет делать кучу разных классов.
В любом случае, автору проще определить, какой из вариантов ему удобнее.
Хотя лично я бы делал кучу классов под разные сообщения - никогда наперёд не знаешь, насколько всё может усложниться.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
w1nd
Дата 17.5.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Hogan, а что делает с сообщением обработчик (получатель)?


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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Проверку классов без необходимости лучше не делать. Если типов сообщений не так много, лучше использовать шаблон проектирования Visitor:
Код

interface MessageListener{
void visit(StringMessage msg);
...
/** Для остальных типов сообщений */
void visit(Message msg);
}

class StringMessage {
...
void visit(MessageListener l) {
  l.visit(this);
}
}

Если типов сообщений много, нужно использовать регистрацию типов сообщений.

PM   Вверх
nornad
Дата 17.5.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

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



Цитата(math64 @  17.5.2007,  13:09 Найти цитируемый пост)
Если типов сообщений не так много, лучше использовать

Мало того, что их должно быть немного, надо ещё иметь их список практически неизменным. Хотя, в данной задаче они вряд ли будут плодиться как кролики. smile


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Maksym
Дата 17.5.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


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

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



Цитата(nornad @  17.5.2007,  04:23 Найти цитируемый пост)
Потому что, если сообщения простые и работа с ними (в коде) занимает мало места, то можно сделать всего один класс сообщения, который будет хранить не только само сообщение, но и его тип. А возможно и делать какие-то полезные вещи с сообщением. В твоём же случае надо будет делать кучу разных классов.
В любом случае, автору проще определить, какой из вариантов ему удобнее.
Хотя лично я бы делал кучу классов под разные сообщения - никогда наперёд не знаешь, насколько всё может усложниться. 

Просто мне показалось, что вопрос не о проектировании, а о кодировании конкретного места.
Для проектирования маловато информации.
Цитата(w1nd @  17.5.2007,  08:34 Найти цитируемый пост)
Hogan, а что делает с сообщением обработчик (получатель)? 

Хороший вопрос.

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

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

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


 




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


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

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