Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Class -> first class object |
Автор: Karadul 18.2.2012, 12:07 | ||
Как получить в яве ссылку на класс и потом вызвать через нее конструктор класса? Т.е.
|
Автор: jk1 18.2.2012, 12:28 | ||
|
Автор: Karadul 18.2.2012, 13:57 |
А как передать параметры конструктору? |
Автор: jk1 18.2.2012, 14:05 | ||
|
Автор: Karadul 18.2.2012, 14:13 | ||
Зачем мне все это нужно: Читается в цикле serversocket, принимается соединение и создается обьект с ссылкой на хендлер уже клиентского сокета в качестве параметра. Так пойдет, или можно что-то лучше придумать?
То, что ты дал конечно работает, но все прелести статического языка пропадают, при изменении числа параметров придется вручную править код. |
Автор: Samotnik 18.2.2012, 14:16 | ||
Singleton? |
Автор: Karadul 18.2.2012, 14:19 |
Samotnik, зачем удалил-то? Пример можно? |
Автор: Samotnik 18.2.2012, 14:20 |
Karadul, ты же сказал не то ) Добавлено через 33 секунды Если четсно не очень понятно что нужно. Рефлексия или традиционный вызов? |
Автор: Karadul 18.2.2012, 14:22 |
Плохо понимаю, что есть что в яве. Так, как я представляю, мне нужно сохранить класс в переменной (что в питоне имхо пройдет без проблем) и потом вызвать его конструктор с параметрами. Пример в оппосте. |
Автор: jk1 18.2.2012, 14:35 | ||||
Karadul, а что мешает в рантайме определять? обобщение же элементарное
|
Автор: Karadul 18.2.2012, 15:02 | ||
Не так. Пример смотри в оппосте. Еще точнее наверно так:
jk1, у тебя params прописаны отдельно. Что произойдет, елси я поменяю сигнатуру конструктора? |
Автор: jk1 18.2.2012, 15:07 | ||
Тогда и params должны поменяться. Скажите мне вот что: откуда Вы хотите брать реальные значения параметров для передачи конструктору с неизвестной сигнатурой? Они будут приходить по сети? Ну так и снимите с них в рантайме реальные типы, как я снял их со статического массива |
Автор: Karadul 18.2.2012, 15:12 |
Типы значений - из сигнатуры, реальные значения - из new Thread(new socketHandler(sock)) в примере выше, т.е. из кода. Если они друг другу перестанут соотвествовать, что произойдет? |
Автор: jk1 18.2.2012, 16:38 | ||||
Вылетит исключение
|
Автор: Karadul 19.2.2012, 02:05 |
Вот поэтому это решение мне не очень нравится - теряются все преимущества явы как статического языка. Нет ли чего-нибудь получше? |
Автор: Karadul 19.2.2012, 04:53 | ||
Почему-то никто не подсказал про Factory. Вообще костыльность явы просто поражает.
|
Автор: Samotnik 19.2.2012, 13:11 |
Потому что нужно формировать задачу яснее ![]() что именно является костылём? Одно из основополагающих свойств полиморфизма, когда супер класс может ссылаться на подкласс? |
Автор: Karadul 19.2.2012, 13:32 |
Дык куда уж. Пример кода я дал. То, что класс - не обьект первого класса, как и функция. А костыли - это фабрики и интерфейсы вместо замыканий. |
Автор: jk1 19.2.2012, 18:45 | ||||
... из которого ничего не ясно. Какой-то thread, какой-то socket. Вы хотите на основании пришедших по сокету данных создать объект? Или что? Тогда какие данные будут приходить? Вы описали бы подробно, что есть в наличии и что надо получить. Тогда и ответ был бы сразу.
Функций в java нет вообще. А класс все-таки first class object, тут Вы неправы. |
Автор: Karadul 19.2.2012, 18:54 |
Но пользоваться им можно только через ректум. Собсно говоря, такие костыли сильно путают человека, который к ним не привык - приходится думать не в интуитивно понятных вещах, а хз в чем. Что еще попалось на глаза - в яве искаропки нет парсера для двоичный форматов с little endian полями, не говоря о смешаных и чего-нибудь вроде zero-terminated строк. |