![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| inohodec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.12.2004 Репутация: 2 Всего: 2 |
Всем привет
Возник вопрос, есть сложная и запутанная конструкция классов и вызов нужного метода может приобретать ужасающие формы, например:
Где то так В принципе каждый из объектов может быть null Можно конечно сделать проверку с ифами, но довольно громоздко И вот возникла идея написать метод который будет получать 2 параметра: Первый - начало, в моем примерчикe это Test, т.е. живой объект который и нужно проверить Второй - String - путь к нужному объекту или методу - Test.getObject1.getMethod2().getObject3.getMethod4().getMethod5()..... Ну и дальше уже внутри метода акким то образом Разложить стринг на составляющие, проверить нет ли по дороге null и если все ОК, вернуть true И отсюда вопрос Насколько это реально ? Может есть другое решение? И если все таки это осуществимо, то хотелось бы узнать как я могу из строки дергать нужные методы и проверять их ... Всем спасибо |
|||
|
||||
| niasilil |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
а зачем парсить то? в этом методе зовешь функцию - если NullPointerException вываливается, то возвращай false.
-------------------- SCJP 5.0, SCJD |
|||
|
||||
| inohodec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.12.2004 Репутация: 2 Всего: 2 |
niasilil
Это да, но это опять же решение через if Количество подобных вызовов громадно ... Мне придется делать какой нибудь switch В нем уже вызывать эти методы и возвращать true/false |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Товарищ, вам религия не позволяет пользоваться if? Во-вторых niasilil предложил вариант где нет ниодного if Добавлено через 1 минуту niasilil, от меня лично спасибо, я что-то запамятовал, что так изящно можно решить такие проблемы ^_^ |
|||
|
||||
| inohodec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.12.2004 Репутация: 2 Всего: 2 |
Религия позволяет ...
Просто на секундочку давайте представим как это будет выглядеть Есть класс Test и в нем еще 8!!! на сегодня 8 в смысле как матрешка Начинаем иф
Уже как то не фонтан А ведь мне может понадобится дойти только то 4-ого или до 2-ого Ну это решаемо допустим еще одним параметром - deep Но я расписал только один из путей А так каждый get может содержать несколько методов ... Т.е. Test.get1().get2() не обязательно идет в get3 Он может вызвать еще другие ... |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Смотрим:
niasilil, просто герой! |
|||
|
||||
| inohodec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.12.2004 Репутация: 2 Всего: 2 |
100% герой и огромное ему за это спасибо
Но я по прежнему с вопросом Ок, использую я ваш подход, учитывая довольно большое разнообразие вызовов Я должен делать switch, передавать ему какую то константу и запусакть соответствующий метод Т.е. создать switch на ... 100 Да, без ифов Но по прежнему решение которое в дальнейшем будет требовать изменений Добавятся классы, нужно будет добавлять что то в switch Изменятся, изменять Хотелось просто найти решение которое бы в дальнейшем в независимости от изменений ода оставалось постоянным |
|||
|
||||
| dorogoyIV |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
так вам надо познакомиться с методом рефлексии!
ну и плюс класс java.lang.Class с методами getMethods(), ... |
|||
|
||||
| Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Ты уверен что свич тебе нужен? Можно предложить OO решение, расширяемое и гибкое.
Если в doIt передаются параметры, то передавай из также в Task
|
||||
|
|||||
| inohodec |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.12.2004 Репутация: 2 Всего: 2 |
Рефлексия ... и ОО
Всем спасибо за помощь |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |