Size: a a a

Kotlin Community

2020 June 29

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
Ну там же можно посмотреть, нуллабельный он или нет
Можно, но мне кажется это оверхед
источник

КР

Кирилл Романенко... in Kotlin Community
Vladimir Petrakovich
Ну там же можно посмотреть, нуллабельный он или нет
Да, но никакого контракта там нет
источник

AM

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

КР

Кирилл Романенко... in Kotlin Community
Vladimir Petrakovich
Ну там же можно посмотреть, нуллабельный он или нет
В целом мне не важно, есть ли контракт, мне главное свести тип T? до T, но я хз возможно ли это
источник

BP

Bogdan Panchenko in Kotlin Community
Кирилл Романенко
В целом мне не важно, есть ли контракт, мне главное свести тип T? до T, но я хз возможно ли это
Ток контракты либо каст. Я привел функции которые это делают 😊
источник

КР

Кирилл Романенко... in Kotlin Community
Bogdan Panchenko
Ток контракты либо каст. Я привел функции которые это делают 😊
Эти функции проверяют не дженерики, а фактические значения
источник

BP

Bogdan Panchenko in Kotlin Community
А
источник

BP

Bogdan Panchenko in Kotlin Community
Ну можно попытаться тогда объеденить контракты и typeOf
источник

A

ABI in Kotlin Community
Да, я смотрел его выступление. Мужик!
источник

VP

Vladimir Petrakovich in Kotlin Community
Кирилл Романенко
В целом мне не важно, есть ли контракт, мне главное свести тип T? до T, но я хз возможно ли это
Кастом, не?
источник

КР

Кирилл Романенко... in Kotlin Community
Vladimir Petrakovich
Кастом, не?
Что кастом?
источник

VP

Vladimir Petrakovich in Kotlin Community
Кастом приводить к не-нулабельному типу
источник

VP

Vladimir Petrakovich in Kotlin Community
Можно код, что вообще нужно получить?
источник

КР

Кирилл Романенко... in Kotlin Community
Vladimir Petrakovich
Можно код, что вообще нужно получить?
inline fun <reified T : Any?> foo1() {
   if (null !is T)
       foo2<T>()
   else ...
}

inline fun <reified T : Any> foo2() = Unit

Вот мне надо проверить тип T на нуллабельность, и сделать либо одно, либо другое.
источник

VP

Vladimir Petrakovich in Kotlin Community
Кирилл Романенко
inline fun <reified T : Any?> foo1() {
   if (null !is T)
       foo2<T>()
   else ...
}

inline fun <reified T : Any> foo2() = Unit

Вот мне надо проверить тип T на нуллабельность, и сделать либо одно, либо другое.
Интересный код. А значений этого типа нет, надо производить операции именно над типами?
источник

КР

Кирилл Романенко... in Kotlin Community
Vladimir Petrakovich
Интересный код. А значений этого типа нет, надо производить операции именно над типами?
Да. Этот код будет производиться до получения значений.
источник

AH

Ayrat Hudaygulov in Kotlin Community
Кирилл Романенко
inline fun <reified T : Any?> foo1() {
   if (null !is T)
       foo2<T>()
   else ...
}

inline fun <reified T : Any> foo2() = Unit

Вот мне надо проверить тип T на нуллабельность, и сделать либо одно, либо другое.
fun T?.foo1() = 
 if (this != null) foo2<T>()
 else ...
источник

VP

Vladimir Petrakovich in Kotlin Community
Кирилл Романенко
Да. Этот код будет производиться до получения значений.
Боюсь, в котлине нет средств, чтобы доказать компилятору, что уже объявленный тип наследуется от какого-то другого.
Смарткасты, контракты и всё такое работает только со значениями.
источник

I

Ilmir in Kotlin Community
Кирилл Романенко
inline fun <reified T : Any?> foo1() {
   if (null !is T)
       foo2<T>()
   else ...
}

inline fun <reified T : Any> foo2() = Unit

Вот мне надо проверить тип T на нуллабельность, и сделать либо одно, либо другое.
Можно объявить ещё одну функцию, которая будет принимать нулябельный тип:
inline fun <reified T : Any> foo1(t: T) {
   println("reified T : Any: $t")
}

@JvmName("-foo1")
inline fun <reified T> foo1(t: T) {
   println("reified T: $t")
}

fun test1(a: Any?) {
   foo1(a)
}

fun test2(a: Any) {
   foo1(a)
}

fun main() {
   test1("nullable")
   test2("non-nullable")
}
источник

AI

Arkadii Ivanov in Kotlin Community
Ilmir
Можно объявить ещё одну функцию, которая будет принимать нулябельный тип:
inline fun <reified T : Any> foo1(t: T) {
   println("reified T : Any: $t")
}

@JvmName("-foo1")
inline fun <reified T> foo1(t: T) {
   println("reified T: $t")
}

fun test1(a: Any?) {
   foo1(a)
}

fun test2(a: Any) {
   foo1(a)
}

fun main() {
   test1("nullable")
   test2("non-nullable")
}
В исходном вопросе нет значения,  есть только тип 🤔
источник