Size: a a a

Kotlin Community

2020 July 11

AS

Aleksandr Semyanniko... in Kotlin Community
Igor
Потому что можно написать
class SecondOpenClass : OpenClass()

и
Foo<SecondOpenClass>()

не будет иметь смысла
🤔
т.е. можно и вот так:

open class OpenClass
class FirstOpenClass : OpenClass()
class SecondOpenClass : OpenClass()

class Foo<TGen : OpenClass> (
   val open: TGen// = FirstOpenClass() //error
) {
   companion object {
       fun buildFirst() = Foo(FirstOpenClass()) // it's OK
       fun buildSecond() = Foo(SecondOpenClass()) // it's OK
   }
}


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

I

Igor in Kotlin Community
Aleksandr Semyannikov
Ну почему, через builder же все ок создается
Ну попробуй в kotlin scratch выполнить такой код

https://gist.github.com/y2k/6422c651c3f1e3593c38e83d1eaa220f
источник

D

Dmitry in Kotlin Community
Iaroslav Orlov
а в расте как на это отреагировали?
https://www.reddit.com/r/rust/comments/hneczb/rust_team_is_going_to_replace_whitelist_with/ - тут можно почитать и ссылка на ПР там же.
А в котлине то как? Если закрыли - интересно с какой формулировкой
источник

AS

Aleksandr Semyanniko... in Kotlin Community
Igor
Ну попробуй в kotlin scratch выполнить такой код

https://gist.github.com/y2k/6422c651c3f1e3593c38e83d1eaa220f
Аа, понял что ты имел в виду
источник

I

Igor in Kotlin Community
Если бы в котлин можно было вешать на дженерик тип ограничение "требуется пустой конструктор" ( new() ),
то можно было писать что-то такое:
https://gist.github.com/y2k/640af64406b272fe5c9074e5e74f686f (там c#)
источник

AN

Alexander Nozik in Kotlin Community
В котлине вроде такого не было. Было в другом JB проектк
источник

AM

Andrew Mikhaylov in Kotlin Community
источник

KZ

Konstantin Zolotov in Kotlin Community
Igor
Если бы в котлин можно было вешать на дженерик тип ограничение "требуется пустой конструктор" ( new() ),
то можно было писать что-то такое:
https://gist.github.com/y2k/640af64406b272fe5c9074e5e74f686f (там c#)
Интересно, почему в котлине такого нет 🤔
Обратная совместимость?
источник

AN

Alexander Nozik in Kotlin Community
Konstantin Zolotov
Интересно, почему в котлине такого нет 🤔
Обратная совместимость?
Потом что контрактов на конструкторы нет. Их надо дизайнить. На мой взгляд полезнее не контракты на конструкторы, а контракты на компаньоны
источник

BP

Bogdan Panchenko in Kotlin Community
Dmitry
Помнится в котлине было ишью про переименование блеклиста, в мастере лист все еще черный, помогите найти ишью. Интересно сравнить подход к таким политическим вопросам с растом...
Давайте все таки в @pofftop
источник

AN

Alexander Nozik in Kotlin Community
В С# эта фича кстати сильно ограничена. Она там впаяна в язык просто так с дополнительным синтаксисом и без особого идейного смысла
источник

AA

Andrey Antipov in Kotlin Community
Igor
Если бы в котлин можно было вешать на дженерик тип ограничение "требуется пустой конструктор" ( new() ),
то можно было писать что-то такое:
https://gist.github.com/y2k/640af64406b272fe5c9074e5e74f686f (там c#)
Вот такой аналог на Kotlin вас не устраивает?
class A

class Foo<T>(cons: () -> T) {
   val open by lazy(cons)
}

fun main() {
   val a = Foo(::A).open
}
источник

IO

Iaroslav Orlov in Kotlin Community
Alexander Nozik
В С# эта фича кстати сильно ограничена. Она там впаяна в язык просто так с дополнительным синтаксисом и без особого идейного смысла
да, полноценно такой фигнёй можно страдать только в плюсах
источник

IO

Iaroslav Orlov in Kotlin Community
где вызов параметра шаблона без нужного конструктора просто сломает компиляцию
источник

IO

Iaroslav Orlov in Kotlin Community
Iaroslav Orlov
да, полноценно такой фигнёй можно страдать только в плюсах
ну и языки со сложным выводом типов типа f#
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
да, полноценно такой фигнёй можно страдать только в плюсах
Ну в котлин это может хорошо решаться интерфейсами для компаньонов. Но надо опять же корнер кейсы разбирать.
источник

IO

Iaroslav Orlov in Kotlin Community
Alexander Nozik
Ну в котлин это может хорошо решаться интерфейсами для компаньонов. Но надо опять же корнер кейсы разбирать.
и как этот компаньон получить из T?
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
и как этот компаньон получить из T?
источник

IO

Iaroslav Orlov in Kotlin Community
нельзя ж сделать констрейт T.Companion : Creatable
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
нельзя ж сделать констрейт T.Companion : Creatable
Сейчас нельзя. Но речь о том, чтобы было можно
источник