Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом? / 5 сообщений из 5, страница 1 из 1
26.03.2017, 10:30
    #39427233
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом?
Есть у меня UI компонент, который через dragAndDrop может принимать 2 типа объектов, которые на него "бросаются" пользователем.
Это, или Контрагент, или Продукт, а сам принимающий объект это Группа товаров.

В примерах ДропХендлера получаем вот такой вот код от всех тех объектов, которые на него бросили.
Карявенько я выражаюсь, но, надеюсь суть ясна :)

Код: java
1.
Collection dragedObjectsCollection = (Collection) source.getValue();


Дак вот эта коллекция может быть 2-х (пока и здесь только 2-х) типов.
Либо это Product либо Contractor

Есть ли возможность узнать заранее, до попытки преобразовать коллекцию в массив или лист объектов, его тип,
ну чтобы лишний раз не писать трай или еще что-то типа условий.
А еще, недавно тут напугали меня тем, что instance of есть нехорошо и следовало бы избегать такого, это, конечно относится к объектам, но все же пишу про это здесь тоже :)
Хотя мне на производительность пока фиолетово, надо бы реализовать функционал, в требованиях про скорость ничего нет.
Но тем не менее, хотелось бы сразу красиво попытаться сделать.
Спасибо.
...
Рейтинг: 0 / 0
26.03.2017, 10:32
    #39427234
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом?
п.с. условие какое-то, конечно, придется писать, все-равно, но хотелось бы после проверки и до преобразования :)
...
Рейтинг: 0 / 0
26.03.2017, 10:54
    #39427238
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом?
В принципе можно сделать так:
Код: java
1.
2.
3.
Collection dragedObjectsCollection = (Collection) source.getValue();
                List<Object> dragedObjectsList = new ArrayList<>();
                dragedObjectsList.addAll(dragedObjectsCollection);


и потом проверять коллекцию на isEmpty и брать элемент с индексом 0
и далее через instanceof к какому типу относится объект и уже оттуда плясать, но..
верно ли такое решение, кашерно ли? :)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 if (!dragedObjectsList.isEmpty()) {
                                Object obj = dragedObjectsList.get(0);
                                if (obj instanceof Product) {
                                    ...
                                }
                                if (obj instanceof Contractor) {
                                    ...
                                }
                            } 
...
Рейтинг: 0 / 0
27.03.2017, 21:12
    #39428025
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом?
NixicЕсть у меня UI компонент, который через dragAndDrop может принимать 2 типа объектов, которые на него "бросаются" пользователем.

Ты нас всех (читающих топик) ставишь в глупое положение. Библиотек поддержки UI в Java содержится большое
количество (Swing/FX/GWT) и надо тебе задавать встречный вопрос об этом. От результатат зависит многое - даже
производительность рефлексии.

А еще, недавно тут напугали меня тем, что instance of есть нехорошо и следовало бы избегать такого, это, конечно относится к объектам, но все же пишу про это здесь тоже :)
Полу-правда хуже чем ложь. Зачастую в java, проверка типа через instance-of - это единственный
и верный способ проверки корректности при даункастинге.

Все прочие советчики которые советуют не использовать instance-of должны дать как минимум
альтернативный вариант и (!) дать ему характеристику в разрезе данного ЯП и алгоритма задачи.
Особенно в части когда у нас не просто даункастинг а выбор двух альтернатив или двух кейсов
производного класса.

Производительность - это хардкор и отдельная тема и о ней имеет смысл говорить только тогда
когда у вас high-load и вы делаете 100500 кастингов в секунду.
...
Рейтинг: 0 / 0
27.03.2017, 22:39
    #39428068
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом?
Nixicкашерно ли? :)Можно избежать целого каскада instanceof уменьшив до одного!
Но тогда придется заимплементить паттерн Visitor и запилить все
это дело совместно со Stream API .
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Тип объектов в коллекции, как узнать до попытки кастовать в массив с заданным типом? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]