
Alexander
04.07.2018
10:12:44
Надо делать проверку на наследование а не на совпадение

Костя
04.07.2018
10:12:50
то есть он понимает что это лист и из каких элементов

Alexander
04.07.2018
10:13:07
Котлин же подменяет типы списков на свои
Не понял. Вы тип можете передать с дженериком, но у реального листа в рантайме этого дженерика не будет.

Google

Костя
04.07.2018
10:13:44
кстати, да

Alexander
04.07.2018
10:14:01
Можно только у каждого элемента спросить, какой у него тип, но не тип листа.

Костя
04.07.2018
10:15:01
просто я так понимаю type берется из параметра дженерика, и по нему нужно отдавать converter или null если этот converter не подходит к этому типу
и вот если у меня будут 2 converter для разных list
как поступить (

Alexander
04.07.2018
10:16:03
Ну нельзя дженерик в рантайме определить. Никак. Единственный способ - при создании вашего листа создать еще инстанс Class или KClass и тащить его с собой
Что собственно довольно нормальное решение, если это действительно нужно. Но в большинстве случаев, это можно обойти проверками на этапе компилляции
Собственно, в джаве для того type erasure сделано, чтобы народ гвозди микроскопами не забивал.

Sergey
04.07.2018
10:34:56
если у вас функция это какой-нибудь try/catch экспрешен, в каком случае вы всю функцию в экспрешен тоже конвертируете? или делаете body с return?
пардон, экспрешен на 5-10строк

Andrey
04.07.2018
10:44:23

Andrey
04.07.2018
10:44:57

Google

Alexander
04.07.2018
10:46:05
Я читал довольно много разных статей на эту тему. Во многих местах довольно авторитетно написано, что type erasure - это вообще правильно. И довольно сильный резон тут есть. Мест, где реально надо таскать с собой стертый тип в природе очень-очень мало.
Фактически это нужно только если какая-то динамическая генержка есть. Я в этих случаях просто таскаю с собой Class и особых проблем не ощущаю

Andrey
04.07.2018
10:47:08
Вообще редкий кейс.
Option всем, парни.

Alexander
04.07.2018
10:48:07
Вообще не вижу проблемы. Я знаю, что мне часто хочется иметь self тип, но это уже не проблема erasure

Andrey
04.07.2018
10:48:46

dimiii
04.07.2018
10:49:13

Alexander
04.07.2018
10:50:00
Не вижу. У меня огромный кусок кода как раз с перегрузкой и опционалами. Я правда их сейчас на котлиновские нулябли везде заменяю.

dimiii
04.07.2018
10:50:32

Alexander
04.07.2018
10:51:04
Все делается, но выглядит не очень.

Andrey
04.07.2018
10:51:37

Alexander
04.07.2018
10:52:29
Не нужно никакакой кодогенерации. Достаточно абстрактный метод, возавращающий тип сделать.

Andrey
04.07.2018
10:52:51

dimiii
04.07.2018
10:53:28

Andrey
04.07.2018
10:54:09
Нужно 5 разных типов. Сделай 5 разных классов.

Alexander
04.07.2018
10:54:48
Скажем так, часто хочется, чтобы дженерики не стирались. Тем не менее в подавляющем большинстве случаев, можно обойтись и со стиранием. Код со стертыми дженериками заведомо лучше и недажнее, чем с реифицированными (ну если там все не сделана на unsafe cast), так что идея, что типы надо сохранять только без этого уже совсем никак мне кажется разумной.

Andrey
04.07.2018
10:55:19

Google

Andrey
04.07.2018
10:56:04

Alexander
04.07.2018
10:56:07
На джаве писал и до сих пор пишу и нравится. Котлин нравится больше, но и родная джава вполне хороша.

Igor
04.07.2018
10:56:41
Господа, плохо в ладах с синтаксисом, можете привести простой пример условия :
" иначе - подтягивать привязку Родителя"?

Alexander
04.07.2018
10:56:58
Если код со стиранием, то все проверки заведомо делаются при компиляции. Если с реификацией, то скорее всего в рантайме.

Igor
04.07.2018
10:57:20
Ифом можно принебречь

Andrey
04.07.2018
10:57:46
Скажем так, часто хочется, чтобы дженерики не стирались. Тем не менее в подавляющем большинстве случаев, можно обойтись и со стиранием. Код со стертыми дженериками заведомо лучше и недажнее, чем с реифицированными (ну если там все не сделана на unsafe cast), так что идея, что типы надо сохранять только без этого уже совсем никак мне кажется разумной.
Код со стёртыми типами ещё надёжней. В хаскелл, например, в рантайме вообще информации о типах нет. То есть, компилятор, после того, как все сигнатуры выведет и проверит, если всё ок, всё стирает нафиг и компилирует дальше :)

Andrey
04.07.2018
10:57:50

Andrey
04.07.2018
10:59:38

Alexander
04.07.2018
11:00:09
Именно.
Хотя когда припирает, раздражает, что его нет.

Andrey
04.07.2018
11:00:47
Блин, пропустил слово. А в чём проблема проверить все типы при компиляции?

Alexander
04.07.2018
11:01:18
В том, что если типы проверяются при компилляции, то не важно стерты дженерики или нет.

Andrey
04.07.2018
11:01:48

Alexander
04.07.2018
11:02:27
Зачем? хотим шаблонов?
Это уже не стирание типов, это совсем другая история
В шаблонах есть свой большой прелесть, но про них надо очень долго и усердно думать, а то получится C++.

Берял
04.07.2018
11:04:18

Andrey
04.07.2018
11:05:03

dimiii
04.07.2018
11:05:32
new T() сделай со стёртыми типами.
new T - c каким контрактом? Если есть представления, что делать с объектом, значит есть интерфейс, если нет представления - зачем писать такой код?

Берял
04.07.2018
11:05:50

Google

Andrey
04.07.2018
11:06:05

Берял
04.07.2018
11:06:17
или другой jvm язык

Andrey
04.07.2018
11:06:27

Alexander
04.07.2018
11:06:28
На саом деле все это довольно легко делаться при помощи фабрик. Ну да, будет 5 строчек дополнительного кода. И что?

Берял
04.07.2018
11:06:51

Andrey
04.07.2018
11:07:33

Берял
04.07.2018
11:08:19

Andrey
04.07.2018
11:08:45
Всегда.

Берял
04.07.2018
11:09:06

Alexander
04.07.2018
11:09:21
Да не при чем тут джава

Andrey
04.07.2018
11:09:39
Я про спеку дженериков.

Берял
04.07.2018
11:10:13

Andrey
04.07.2018
11:10:44

Alexander
04.07.2018
11:12:23
Синтакс тоже не при чем. Его довольно легко поменять

Костя
04.07.2018
11:47:56
а я правильно понимаю, что работа с кастомными аннотациями в котлин возможна только с добавлением либы kotlin.reflect ?
т.к. когда я получаю аннотации метода, моих кастомных там нету

Alexander
04.07.2018
11:49:33
Что подразумевается по дкстомными аннотациями?

Google

Andrey
04.07.2018
11:49:50

Костя
04.07.2018
11:50:04
мои созданные аннотации
annotation class Name
я не сказал что это хорошо
рефлексия вообще такое себе
решение

dimiii
04.07.2018
11:50:33

Alexander
04.07.2018
11:50:50
Рефлекты для аннотаций не нужны
То есть нужен базовый рефлект, но он в ядре
Аннтоации должны быть использованы умеренно, но сами по себе они не плохи

Andrey
04.07.2018
11:53:32
Почему рак, и что плохого?
Если одним предложением: аннотации непрозрачны для программиста, особенно те, которые в рантайм обрабатываются.
Если подробнее, то аннотируя что-либо, программист говорит: "давай ка, фреймворк, ты в этой точке свой код ещё прогони и сделай мне хорошо". Потом можно наловиться граблей и трудно исследуемых проблем из серии: "да какая ещё скотина эту аннотацию обрабатывает и как???"

Anton
04.07.2018
11:54:36
без аннотаций лучше жили?))

Sergey
04.07.2018
11:54:39
аннотации хороши для метаданных, типа валидации
а для остального такая себе затея
роуты лучше с дсл писать

Andrey
04.07.2018
11:55:04
Во многих случаях рантайм аннотации вполне заменимы функциями высших порядков.

dimiii
04.07.2018
11:55:31

Andrey
04.07.2018
11:57:00

Alexander
04.07.2018
11:57:22