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

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

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

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

return .....


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

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

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

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

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

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

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

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

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

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

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

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

Откуда: Тверь
Сообщений: 3024
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

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

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

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

Откуда:
Сообщений: 3292
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

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

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


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

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

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

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

return .....


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

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


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

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

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


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

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


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

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

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

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


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


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

Откуда: loopback
Сообщений: 46600
Еще один вариант.
    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
Сообщений: 46600
Еще вариант с 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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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

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


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


Т.е. нет? )

Хвост ты-же не любишь банальностей. Я тоже не люблю.
28 апр 20, 16:05    [22124284]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
hVostt
Member

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

Насколько я понял можно только если сделать так

ArrayList<Float> listOfNumbers = new FloatList();
28 апр 20, 18:00    [22124359]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
Автор хочет в рантайме определять тип коллекции.

boolean isFoo(List<T> list)


Если в list все объекты типа Foo - то предикат должен вернуть true.
28 апр 20, 18:30    [22124381]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
hVostt
mayton,

Насколько я понял можно только если сделать так

ArrayList<Float> listOfNumbers = new FloatList();


Скорее вот так.

FooList list = new FooList();

Тогда точно сработает.
28 апр 20, 18:40    [22124392]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
hVostt
Member

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

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

Потому что ArrayList<Float> и ArrayList<Integer> это один и тот же тип.

Короче я нубас в java, не обращайте внимания )
29 апр 20, 00:02    [22124600]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
Наверное в scala (pattern matching) решение было бы какраз то что искал автор.
29 апр 20, 10:21    [22124723]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
забыл ник
Member

Откуда:
Сообщений: 3292
mayton
Наверное в scala (pattern matching) решение было бы какраз то что искал автор.

Не совсем, простой паттерн матчинг там также не сработает, потому что JVM. Но обойти эту проблему можно, интересующиеся найдут в гугле как.
Но в лююом случае паттерн-матчинг тут не при чем. В Scala DTO классы реализуются через case class конструкцию, которая представляет собой ADT(algebraic data type), на основе которого можно написать очень generic код. В принципе в Scala нет особого различия между case class User(name: String, age:Int), case class Employee(name: String, age:Int) и даже простой Tuple ("mayton", 18). Ты просто пишешь как должен десериализовываться String и как Int, а все остальное на себя берет компилятор скалы
29 апр 20, 12:12    [22124802]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
забыл ник
mayton
Наверное в scala (pattern matching) решение было бы какраз то что искал автор.

Не совсем, простой паттерн матчинг там также не сработает, потому что JVM.

Не согласен с отсылкой на JVM. Я думаю что JVM здесь - вторична. А первичны
законы и гарантии которые касаются типизаций. Вот если Стас - декларирует
все возможные типы которые существуют в его системе (а он это знает) то
мы можем предполагать что мы в состоянии написать логику не на рефлексиях
а имеено на сведеньях о типе который известен на момент фазы компилляции.
29 апр 20, 12:49    [22124831]     Ответить | Цитировать Сообщить модератору
 Re: Проверка Generic коллекции на принадлженость к определенному инстансу  [new]
забыл ник
Member

Откуда:
Сообщений: 3292
mayton
забыл ник
пропущено...

Не совсем, простой паттерн матчинг там также не сработает, потому что JVM.

Не согласен с отсылкой на JVM. Я думаю что JVM здесь - вторична. А первичны
законы и гарантии которые касаются типизаций. Вот если Стас - декларирует
все возможные типы которые существуют в его системе (а он это знает) то
мы можем предполагать что мы в состоянии написать логику не на рефлексиях
а имеено на сведеньях о типе который известен на момент фазы компилляции.

Так я тебе о том и говорю, просто паттерн матчинг тут не при чем. Это просто работает через другой механизм.
А вот при попытке использовать паттерн матчинг получишь жесткий отлуп от JVM
29 апр 20, 12:53    [22124834]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Java Ответить