Size: a a a

Kotlin Community

2020 February 26

VP

Vladimir Petrakovich in Kotlin Community
Beholder
Получится неконсистентость. Например у Boolean.Companion this есть, а у BigDecimal например нет
Так это уже совсем другой вопрос, который как раз обсуждали выше
источник

VP

Vladimir Petrakovich in Kotlin Community
Отсутствие this - это вообще не проблема
источник

VP

Vladimir Petrakovich in Kotlin Community
Beholder
Кстати, я очень хотел фичу чтобы из топ функций получить Class, в котором они фактически в JVM определены, или хотя бы ClassLoader
Это очень редко нужно, ну и одна лишняя аллокация на всю жизнь приложения - это не так дорого
источник

AO

Alexey Otts in Kotlin Community
Beholder
Еще вариант в функции создать лямбду и у неё опросить класс и найти внешний, но это лишняя аллокация
ну это можно сделать один раз
источник

SB

Sergey Barmin in Kotlin Community
Коллеги по спрингу, подскажите плз. Создал МР в спринг-дата-коммон на ограничение типа на экстеншне к
CrudRepository, думал там косяк. https://github.com/spring-projects/spring-data-commons/pull/424

Косяк в том что экстеншн вида <T, ID> CrudRepository<T, ID>.findByIdOrNull(id: ID) принимал туда nullable тип, и если туда попадал null соответственно падал в джавке на <ID> findById(id: ID) { checkNotNull(id) }

Оказалось что косяк проявляется  только если наследоваться не напрямую от CrudRepository, а только через PagingAndSortingRepository(JpaRepository), там почему-то по пути теряется понимание что он хочет TypeVariable(ID), и позволяет отдать туда просто ID!

Ревьювер говорит - мол косяк в котлине, проверьте есть ли такая бага в их трекере.
Кто-нибудь в курсе почему так может быть?
источник

U

Unat in Kotlin Community
Sergey Barmin
Коллеги по спрингу, подскажите плз. Создал МР в спринг-дата-коммон на ограничение типа на экстеншне к
CrudRepository, думал там косяк. https://github.com/spring-projects/spring-data-commons/pull/424

Косяк в том что экстеншн вида <T, ID> CrudRepository<T, ID>.findByIdOrNull(id: ID) принимал туда nullable тип, и если туда попадал null соответственно падал в джавке на <ID> findById(id: ID) { checkNotNull(id) }

Оказалось что косяк проявляется  только если наследоваться не напрямую от CrudRepository, а только через PagingAndSortingRepository(JpaRepository), там почему-то по пути теряется понимание что он хочет TypeVariable(ID), и позволяет отдать туда просто ID!

Ревьювер говорит - мол косяк в котлине, проверьте есть ли такая бага в их трекере.
Кто-нибудь в курсе почему так может быть?
Я не уверен, но кажется что там пляски с наследованием класс_в_котлине -> класс_в_джаве -> класс_в_котлине, и в процессе потерялись типы.
источник

SB

Sergey Barmin in Kotlin Community
Unat
Я не уверен, но кажется что там пляски с наследованием класс_в_котлине -> класс_в_джаве -> класс_в_котлине, и в процессе потерялись типы.
там котлин класс только конечный, когда создается котлиноинтерфейс наследующий джаву
источник

SB

Sergey Barmin in Kotlin Community
из спринга котлиновый только экстеншн
источник

U

Unat in Kotlin Community
А ну так где же тогда ошибка?
источник

SB

Sergey Barmin in Kotlin Community
секунду.
источник

SB

Sergey Barmin in Kotlin Community
вот 3 джава интерфейса
источник

U

Unat in Kotlin Community
А, и при использовании .ext-функции на наследнике у неё стираются типы?
источник

SB

Sergey Barmin in Kotlin Community
если отнаследовать котлиноинтерфейс из второго, то будет ошибка
источник

SB

Sergey Barmin in Kotlin Community
Если из нижнего - не будет
источник

U

Unat in Kotlin Community
Имхо, фикс уместный, а у разработчиков котла наверняка есть ответ почему ext-функции для жавовых наследников теряют null-safety.
источник

U

Unat in Kotlin Community
(честно признать я удивлён, что нигде в java коде не увидел аннотации @NonNull)
источник

AL

Alexander Levin in Kotlin Community
Unat
(честно признать я удивлён, что нигде в java коде не увидел аннотации @NonNull)
там на уровне пакета
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Levin
там на уровне пакета
Что местами добавляет веселья с equals)
источник

SB

Sergey Barmin in Kotlin Community
падает то вот тут
источник

SB

Sergey Barmin in Kotlin Community
У кого можно узнать как задумано? В трекере спросить? Хотелось бы как-то обосновать фикс, раз он внезапно встретил сопротивление.
источник