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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ссылка на метод в Java, Можно передать ссылку на объект 
:(
    Опции темы
woland
Дата 4.9.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В java можно передать как параметр, например, в функцию ссылку на объект, а можно ли как-то передать ссылку на метод объекта?
PM MAIL WWW   Вверх
SaSho
Дата 4.9.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В принципе можно. Используя Reflection API. 
Вот только это нужно далеко не всегда. Можно узнать зачем?
PM MAIL ICQ Jabber   Вверх
woland
Дата 4.9.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно между двумя объектами создать связь. Объект B должен при изменении свойства объекта A вызывать метод объекта C. Свойств может быть много, изменению каждого из них соответствует свой метод в классе C.

Видится так что в объекте В будет создана связь между свойством объекта A и методом(ссылкой на него) объекта С.
PM MAIL WWW   Вверх
Platon
Дата 4.9.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Уважаемый, вам стоит посмотреть шаблон "Посредник" (Mediator), а лучше "Слушатель". Если вы делаете не тестировочное ПО, которое работает в условиях полной неопределенности.

Добавлено через 1 минуту и 24 секунды
Вообще, шаблон MVC - устоявшийся пример вашей задачи.
PM MAIL ICQ   Вверх
Ortega
Дата 4.9.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



SaSho, ты советуешь человеку плохую каку. Имхо, человек не должен даже догавдываться о существовании Reflection API до определенного уровня развития как Java-программиста. 
В Java нет ссылок на методы как таковых. Есть полиморфизм. И есть паттерны проектирования. 

woland, для твоего случая хорошо подойдет паттерн Observer. Или MVC.
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
SaSho
Дата 4.9.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Ortega @  4.9.2008,  10:34 Найти цитируемый пост)
SaSho, ты советуешь человеку плохую каку. 

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

PM MAIL ICQ Jabber   Вверх
serious
Дата 4.9.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В Java не передаются ссылки на методы, передаются ссылки на объекты, содержащие нужные методы.


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
Samotnik
Дата 4.9.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



PM MAIL   Вверх
woland
Дата 4.9.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если я правильно понял:

1. Шаблон "Наблюдатель" предлагает использовать один метод который будет дергаться наблюдаемым. То есть не позволяет дергать разные функции при изменении разных свойств?

2. Шаблон "Медиатор" предлагает писать кучу классов, по большому счету одинаковых, только с разной реализацией одного метода, который дергает Медиатор?

Я правильно понял?

Это сообщение отредактировал(а) woland - 4.9.2008, 12:53
PM MAIL WWW   Вверх
Ortega
Дата 4.9.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(woland @  4.9.2008,  12:47 Найти цитируемый пост)
Если я правильно понял:

1. Шаблон "Наблюдатель" предлагает использовать один метод который будет дергаться наблюдаемым. То есть не позволяет дергать разные функции при изменении разных свойств?

2. Шаблон "Медиатор" предлагает писать кучу классов, по большому счету одинаковых, только с разной реализацией одного метода, который дергает Медиатор?

Я правильно понял?

В общем и целом, да. 
Если ты считаешь, что тебе это не подходит - задумайся о том, что в метод, дергаемый наблюдателем можно передавать параметры. 
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
woland
Дата 4.9.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Передать-то можно, можно сделать этот метод этаким коммутатором, ему будет передаваться объект и свойство, а он будет в соответствии с этим вызывать метод внутри себя. Но какой-то не очень красивый вариант решения :(. Хотя похоже единственный.
PM MAIL WWW   Вверх
woland
Дата 4.9.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подумав, решил выбирать между http://java.sun.com/docs/books/tutorial/re...Invocation.html и http://www.cutthecrap.biz/software/delegates.html . Чего выбрать из двух зол? smile
PM MAIL WWW   Вверх
Platon
Дата 4.9.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(woland @  4.9.2008,  16:23 Найти цитируемый пост)
Подумав

такое ощущение, что нет.
Эти два метода были уже озвучены. Все хором тебе советуют делать 2-й вариант.
PM MAIL ICQ   Вверх
w1nd
Дата 4.9.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Ortega @  4.9.2008,  10:34 Найти цитируемый пост)
В Java нет ссылок на методы как таковых.

И очень зря. Статически проверяемые ссылки на методы просто необходимы. А полиморфизм тут вообще не при чём.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Цитата(w1nd @  4.9.2008,  21:04 Найти цитируемый пост)
И очень зря. Статически проверяемые ссылки на методы просто необходимы. А полиморфизм тут вообще не при чём. 


Ну добавят ссылки на методы, макросы, платформо-зависимые компоненты, возможность управлять памятью вручную и получится какой-то J++.

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

P.S. Имхо smile
PM MAIL   Вверх
Ortega
Дата 5.9.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



SoulKeeper, ППКС
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
w1nd
Дата 5.9.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(SoulKeeper @  5.9.2008,  09:52 Найти цитируемый пост)
Ну добавят ссылки на методы, макросы, платформо-зависимые компоненты, возможность управлять памятью вручную и получится какой-то J++.

Не стоит драматизировать, SoulKeeper. Указатели на методы и макросы не есть явления одного порядка с платформо-зависимыми компонентами и управлением памятью. Хотя платформо-зависимые компоненты, как java extension, не помешали бы smile

Цитата(SoulKeeper @  5.9.2008,  09:52 Найти цитируемый пост)
Текущих возможностей джавы хватает с головой, проблема не в отсутсвии возможностей, а в изначально неправильном подходе к реализации.

С головой хватает и возможностей ассемблера. С головой хватает и возможностей hex-редактора. Только вот лопатой очень много махать smile

Это сообщение отредактировал(а) w1nd - 5.9.2008, 11:22


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


Шустрый
*


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

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



Насколько я что-то понимаю, ссылки на функции - реализация полиморфизма в структурных языках программирования. 
В Java для этого есть другие механизмы. 
Человеку, больше привыкшему к тому же Си, это кажется неудобным и неправильным. Однако нужно понимать, что если механизмы другие, то и подход должен быть другой. 

--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок
PM MAIL WWW ICQ Skype GTalk   Вверх
w1nd
Дата 5.9.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Ortega @  5.9.2008,  12:02 Найти цитируемый пост)
Насколько я что-то понимаю, ссылки на функции - реализация полиморфизма в структурных языках программирования.

Неправильно понимаете. В java, конечно, есть механизмы, с помощью которых можно возместить отсутствие рекомого в некоторых ситуациях. Например, вместо указателя на функцию может передаваться экземпляр интерфейса. Причём вариант с объектом интерфейса значительно более громоздок и благодаря отсутствию макросов с этим ничего нельзя сделать. Я уже не говорю, насколько более гибкий и лаконичный механизм можно построить, используя параметризованные ссылки на методы.

Но это только одна сторона вопроса. Более чем в половине случаев использования рефлексии имена методов и базовые классы известны заранее. Наличие ссылок на методы избавило бы от поиска методов класса, от обработки целой кучи исключений, от ошибок, возникших из-за элементарных опечаток.

Это сообщение отредактировал(а) w1nd - 5.9.2008, 17:21


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Для чего рефлексия то для заранее известного? Интерфейсы и кастинг типов уже отменили?
PM MAIL   Вверх
w1nd
Дата 6.9.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(SoulKeeper @  5.9.2008,  20:15 Найти цитируемый пост)
Для чего рефлексия то для заранее известного? Интерфейсы и кастинг типов уже отменили?

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


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Страницы: (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.1285 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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