Size: a a a

Kotlin Community

2020 April 01

AM

Andrew Mikhaylov in Kotlin Community
Alexander Levin
Ну тут спорно, ибо in по-хорошему принимать должен только non-null. Так что формально тут уже есть повод для смарт-каста, если уж допустили такую конструкцию
Навеееерное, но я не сильно уверен в этом
источник

AM

Andrew Mikhaylov in Kotlin Community
На больше-меньше разное наллабилити с двух сторон не сравнивается, если рассматривать in как частный случай двух сравнений -- не очень логично.
источник

AL

Alexander Levin in Kotlin Community
Andrew Mikhaylov
Навеееерное, но я не сильно уверен в этом
Ну т.е. перед ответом вчера я искренне думал, что in нельзя будет написать не написав проверку на null перед этим. Оказывается можно. А раз можно, то и предположения о типе тоже хочется делать внутри такой ветки :)
источник

AM

Andrew Mikhaylov in Kotlin Community
А, можно? Тогда да, логично.
источник

AL

Alexander Levin in Kotlin Community
Andrew Mikhaylov
А, можно? Тогда да, логично.
Т.е. такое валидный код:

val a: Int? = null
   val b = when(a) {
       in 1..3 -> a
       else -> 1000
   }


(просто из-за того, что нету смарт-каста в первой ветке, тип будет Int? )
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Levin
Т.е. такое валидный код:

val a: Int? = null
   val b = when(a) {
       in 1..3 -> a
       else -> 1000
   }


(просто из-за того, что нету смарт-каста в первой ветке, тип будет Int? )
Ну типы то сходятся, вот когда попробуешь присвоить not null тогда и получишь ошибку
источник

AL

Alexander Levin in Kotlin Community
Bogdan Panchenko
Ну типы то сходятся, вот когда попробуешь присвоить not null тогда и получишь ошибку
Ну я только про то, что идейно я бы ожидал, что либо in 1..3 не должен применяться к Int? , либо у выражения был бы тип Int из-за смарт-каста в первой ветке.
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Levin
Ну я только про то, что идейно я бы ожидал, что либо in 1..3 не должен применяться к Int? , либо у выражения был бы тип Int из-за смарт-каста в первой ветке.
Вот второе вполне логично, так как есть else 0
источник

AN

Alexander Nozik in Kotlin Community
Alexander Levin
Ну тут спорно, ибо in по-хорошему принимать должен только non-null. Так что формально тут уже есть повод для смарт-каста, если уж допустили такую конструкцию
Сейчас завезли смарт-каст контракты, можно добавить
источник

VN

Viktor Noskin in Kotlin Community
Alexander Nozik
Сейчас завезли смарт-каст контракты, можно добавить
В 1.4?
источник

AN

Alexander Nozik in Kotlin Community
дв
источник

VP

Vladimir Petrakovich in Kotlin Community
Ну тут in, как я понимаю, не вызов operator fun, а специальная конструкция. То, что выполнение этой ветки не смарткастит a в Int - это явная недоработочка.
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Ну тут in, как я понимаю, не вызов operator fun, а специальная конструкция. То, что выполнение этой ветки не смарткастит a в Int - это явная недоработочка.
Это вызов contains
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Это вызов contains
Это всё ещё был бы вызов IntRange.contains(Int) с наллабл параметром, то есть тут не только он, но и проверка на налл.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Это вызов contains
Ну если так, то можно исправить контрактами
источник
2020 April 02

AL

Alexander Levin in Kotlin Community
Andrew Mikhaylov
Это всё ещё был бы вызов IntRange.contains(Int) с наллабл параметром, то есть тут не только он, но и проверка на налл.
Тут кстати немного не так, contains действительно принимает Int? , просто на него не навешено никаких контрактов сейчас
источник

M

Mike in Kotlin Community
кто-нибудь знает, как пофиксить ?
источник

M

Mike in Kotlin Community
источник

М

Максим in Kotlin Community
В чём различие между такими саспенд объявлениями?
источник

BP

Bogdan Panchenko in Kotlin Community
Mike
кто-нибудь знает, как пофиксить ?
Плагин в гредле для спринга надеюсь подключен. Также лучше продолжить в @kotlin_jvm
источник