Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
Zzz79
Member

Откуда:
Сообщений: 168
Смотрите народ

есть метод в который прилетает лист

private <T> boolean isFoo(List<T> list){

return .....


и тут нужно как то проверить явлется ли этот лист коллекцией с объектами класса Foo

вопрос как это сделать)
27 апр 20, 20:24    [22123760]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
понятно что можно перебрать все элементы и почекать их принадлженость к определенному классу-но это не совсем изящное решение и боюсь его завернут
27 апр 20, 21:37    [22123800]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Ты - сам с собой разговариваешь?
27 апр 20, 22:40    [22123835]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
mayton,
не)хочу узнать как)
27 апр 20, 22:41    [22123837]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Генерик

private <T> boolean isFoo(List<T> list){

в байткоде (рантайме) будет выглядеть так

private boolean isFoo(List<Object> list){


Вот такие вот они в Java генерики. Кривые и недобитые. Если-б ты взял
С++ или Хаскель - то там обобщённые коллекции - более строгие
и точные. И можно даже примитив туда вставить.

А твой вопрос - лишен смысла. Генерик - это фаза компилляции.
А instance-of - фаза рантайма. Не встречаются они во времени.
27 апр 20, 23:28    [22123858]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10171
А что изменилось бы, если бы "встретились"?
Есть общий предок и несколько потомков.
Список, содержащий смесь из разных предков и разных потомков - допустим.
Как убедиться, что в конкретном списке содержатся потомки только определённого типа (и потомки этого "определённого типа")?
27 апр 20, 23:33    [22123864]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Basil A. Sidorov
А что изменилось бы, если бы "встретились"?

Я не хочу говорить сослагательно во вполне конкретном форуме java.
Так мы уйдем слишком далеко. Спроектируем свой компиллятор и рантайм.
Я не готов к этому. И сообщество не готово скорее всего.

Есть общий предок и несколько потомков.

Можно попробовать поиграть с bounded type и просто создать несколько
перегруженных генериков. Но это не будет похоже на 1-й вопрос автора.
27 апр 20, 23:39    [22123868]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
mayton
Генерик

private <T> boolean isFoo(List<T> list){

в байткоде (рантайме) будет выглядеть так

private boolean isFoo(List<Object> list){


Вот такие вот они в Java генерики. Кривые и недобитые. Если-б ты взял
С++ или Хаскель - то там обобщённые коллекции - более строгие
и точные. И можно даже примитив туда вставить.

А твой вопрос - лишен смысла. Генерик - это фаза компилляции.
А instance-of - фаза рантайма. Не встречаются они во времени.

я не хочу сравнивать на этапе компиляции- это по сути невозможно) мне нужно сравнить то что прилетело в качестве List на соответсвие опеределенному классу
27 апр 20, 23:54    [22123876]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
и я так понимаю что кроме как поэлементного сравнения на instanseof методов нет

пс.вообще конечно я понимаю что если поступила такая задача - значит что то где то не так написано- ибо в метод должно приходить именно то что надо

я решил сделать так
принимаю в праметры метода лист
и в зависимости от его принадлежности возвращаю то или иное ДТО
27 апр 20, 23:57    [22123880]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
asv79
mayton
Генерик

private <T> boolean isFoo(List<T> list){

в байткоде (рантайме) будет выглядеть так

private boolean isFoo(List<Object> list){


Вот такие вот они в Java генерики. Кривые и недобитые. Если-б ты взял
С++ или Хаскель - то там обобщённые коллекции - более строгие
и точные. И можно даже примитив туда вставить.

А твой вопрос - лишен смысла. Генерик - это фаза компилляции.
А instance-of - фаза рантайма. Не встречаются они во времени.

я не хочу сравнивать на этапе компиляции- это по сути невозможно) мне нужно сравнить то что прилетело в качестве List на соответсвие опеределенному классу

Невозможно по сути на java, а не в принципе невозможно.
Кроме как говнокодом на java скорее всего не разрулить
28 апр 20, 00:08    [22123888]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3013
забыл ник,

ну я так по сути и предполагал- просто дали задачу запилить общий метод для разных классов- выше тема есть про это
там 4 разных дто,которые ничем не связаны и требуется общий метод))
еще чтобы в параметрах передавался метод,который сам по себе должен быть генериком и принимать генерики\


мне кажется наш тим лид просто покурил хорошей афганской травы)
28 апр 20, 00:14    [22123891]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
Zzz79
Смотрите народ

есть метод в который прилетает лист

private <T> boolean isFoo(List<T> list){

return .....


и тут нужно как то проверить явлется ли этот лист коллекцией с объектами класса Foo

вопрос как это сделать)


Я бы спросил "зачем"?

ИМХО можно сделать метод protected abstract, и уже в потомках переопрделить, под конкретный класс для генерика.
Ну и для класса/классов сделать интерфейс, через которой будут работать с конкретными реализациями.
28 апр 20, 06:17    [22123939]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
А твой вопрос - лишен смысла. Генерик - это фаза компилляции.


В мета-данных типа никакой информации не сохраняется?
28 апр 20, 09:27    [22123979]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
Zzz79
Member

Откуда:
Сообщений: 168
mad_nazgul


Я бы спросил "зачем"?

ИМХО можно сделать метод protected abstract, и уже в потомках переопрделить, под конкретный класс для генерика.
Ну и для класса/классов сделать интерфейс, через которой будут работать с конкретными реализациями.

ну у нас сейчас так и сделано- просто получается дубляж кода- так как сама логика неизменна - просто меняются названия дто( которые идентичны)
28 апр 20, 09:36    [22123988]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt
mayton
А твой вопрос - лишен смысла. Генерик - это фаза компилляции.


В мета-данных типа никакой информации не сохраняется?


Ну.. вы раз уж взялись - развивайте в топике тему мета-информации. А я - проверю генерики хотя-бы с иерархией типов.
28 апр 20, 10:17    [22124009]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Еще один вариант.
    class Client {}
    class Person extends Client {}
    class Organization extends Client {}

    private boolean isPerson(List<Client> list){
        // Assume that all elements are the same types (according to 'Generic' pre-checks during compile time)
        return list.get(0) instanceof Person;
    }

    private boolean isOrganization(List<Client> list){
        return list.get(0) instanceof Organization;
    }
28 апр 20, 10:24    [22124015]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Еще вариант с bound.

    class Client {}
    class Person extends Client {}
    class Organization extends Client {}

    private Class detectClass(List<? extends Client> list){
        // Assume that all elements are the same types (according to 'Generic' pre-checks during compile time)
        return list.get(0).getClass();
    }


Сообщение было отредактировано: 28 апр 20, 10:35
28 апр 20, 10:26    [22124016]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
Zzz79
mad_nazgul


Я бы спросил "зачем"?

ИМХО можно сделать метод protected abstract, и уже в потомках переопрделить, под конкретный класс для генерика.
Ну и для класса/классов сделать интерфейс, через которой будут работать с конкретными реализациями.

ну у нас сейчас так и сделано- просто получается дубляж кода- так как сама логика неизменна - просто меняются названия дто( которые идентичны)


Если дубляж кода, то зачем знать класс генерика?!
Либо, дубляжа кода нет. ;-)

Вы можете сделать несколькими путями.
В абстрактном классе сделать методы, которые не зависят от типа генерика.
А уже в реализациях дописать типозависмые методы.

Либо реализовать вынести типозависимую часть в лямбду/ы
И при использовании/инициализации класса внедрять нужные лямбды.
28 апр 20, 11:43    [22124074]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Вот интересно. Лямбды - "усиливают" принципы повторного использования кода или ослабляют?
28 апр 20, 11:45    [22124078]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
Zzz79
Member

Откуда:
Сообщений: 168
mad_nazgul,

да пришлось сделать абстрактный класс типизированый
и абстрактные методы
вроде как получилось)
сейчас буду тестировать
28 апр 20, 11:46    [22124079]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
booby
Member

Откуда:
Сообщений: 1939
mayton
Вот интересно. Лямбды - "усиливают" принципы повторного использования кода или ослабляют?

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

В это отношении - усиливают и ослабляют одновременно,
давая тебе еще одну возможность имитации указателя на функцию (что усиливает),
которую ты должен всякий раз заново построить по месту (что ослабляет).
28 апр 20, 13:08    [22124154]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
booby

которую ты должен всякий раз заново построить по месту (что ослабляет).

Последняя фраза достаточно точно описывает мои мысли.
28 апр 20, 13:22    [22124162]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
booby
Member

Откуда:
Сообщений: 1939
mayton
booby

которую ты должен всякий раз заново построить по месту (что ослабляет).

Последняя фраза достаточно точно описывает мои мысли.

копи-паст - это техническое существо профессии.
К нему все сводится и без него не существует.
От того он к себе большого уважения требует, а не обвинений начальника в наркомании.
28 апр 20, 13:29    [22124171]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
hVostt
Member

Откуда:
Сообщений: 17476
mayton
hVostt
пропущено...


В мета-данных типа никакой информации не сохраняется?


Ну.. вы раз уж взялись - развивайте в топике тему мета-информации. А я - проверю генерики хотя-бы с иерархией типов.


Т.е. нет? )
28 апр 20, 16:00    [22124278]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
hVostt
mayton
пропущено...


Ну.. вы раз уж взялись - развивайте в топике тему мета-информации. А я - проверю генерики хотя-бы с иерархией типов.


Т.е. нет? )

Хвост ты-же не любишь банальностей. Я тоже не люблю.
28 апр 20, 16:05    [22124284]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить