Size: a a a

Kotlin Community

2020 June 12

D

Denys in Kotlin Community
fun foo(): String {
 return null as String
}


Скомпилится, но рванёт в рантайме.
источник

AN

Alexander Nozik in Kotlin Community
Ну если надо запихать нуль туда, куда нельзя запихать нуль, надо взять нуль и скастовать его к типу
источник

VS

Vladimir Sitnikov in Kotlin Community
Alexander Nozik
Ну не важно, ручной каст и подавить ворнинг. Должно работать
Кхм. Я почему-то думал, что T? as T превратится в NPE
Но, похоже, работает
источник

D

Denys in Kotlin Community
Alexander Nozik
Ну если надо запихать нуль туда, куда нельзя запихать нуль, надо взять нуль и скастовать его к типу
Нельза. Компилятор вставляет проверки
источник

AN

Alexander Nozik in Kotlin Community
Denys
Нельза. Компилятор вставляет проверки
можна
источник

AN

Alexander Nozik in Kotlin Community
компилятор не в этом месте проверки вставляет.
источник

D

Denys in Kotlin Community
Alexander Nozik
можна
У меня отак https://pl.kotl.in/pfbLjaR71

Exception in thread "main" kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String
источник

VS

Vladimir Sitnikov in Kotlin Community
Denys
У меня отак https://pl.kotl.in/pfbLjaR71

Exception in thread "main" kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String
Ага, всё верно. kotlin.TypeCastException: null cannot be cast to non-null type java.io.File

Это я проверял неправильно.
источник

AN

Alexander Nozik in Kotlin Community
Denys
У меня отак https://pl.kotl.in/pfbLjaR71

Exception in thread "main" kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String
ммм... Ну вот эта проверка отключается. Но как-то некузяво, да.
источник

D

Denys in Kotlin Community
Alexander Nozik
ммм... Ну вот эта проверка отключается. Но как-то некузяво, да.
Я только видел как ёё из байткода резать. Разве можно компилятора попросить?
источник

AN

Alexander Nozik in Kotlin Community
Denys
Я только видел как ёё из байткода резать. Разве можно компилятора попросить?
Есть общий ключ компиляции, который эти проверки отключает и по-моему можно локальный супрес сделать. Но я не помню как, никогда таким извращением не занимался
источник

D

Denys in Kotlin Community
Alexander Nozik
Есть общий ключ компиляции, который эти проверки отключает и по-моему можно локальный супрес сделать. Но я не помню как, никогда таким извращением не занимался
Ну такое. Лучше уже костылем через платформенным типом с навешаным warning'ом. Или нормальным адаптером. :)

И проще, и надёжнее.
источник

AN

Alexander Nozik in Kotlin Community
Denys
Ну такое. Лучше уже костылем через платформенным типом с навешаным warning'ом. Или нормальным адаптером. :)

И проще, и надёжнее.
согласен
источник

D

Denys in Kotlin Community
Интересно, зачем в Gradle так сделали. :)
источник

AL

Alexander Levin in Kotlin Community
Vladimir Sitnikov
Ага, всё верно. kotlin.TypeCastException: null cannot be cast to non-null type java.io.File

Это я проверял неправильно.
Это не поможет случайно?

https://github.com/JakeWharton/confundus

P.s. сорри за предыдущую ссылку, андроид решил не копировать то, что просили
источник

VP

Vladimir Petrakovich in Kotlin Community
Vladimir Sitnikov
Я сделал

inline fun <reified T> T.toPlatformType() = Function.identity<T>().apply(this)

Но выглядит как костыль 😕
Интересная штука, надо запомнить
источник

VP

Vladimir Petrakovich in Kotlin Community
А вообще поможет unchecked cast
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
А вообще поможет unchecked cast
он только для дженериков
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
он только для дженериков
Ну можно попытаться приплести дженерики
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Ну можно попытаться приплести дженерики
Через попу. Я об этом подумал, но просто не получится
источник