Size: a a a

Kotlin Community

2020 March 21

BV

Boris Vanin in Kotlin Community
Так что честно кастить к типу *
источник

VP

Vladimir Petrakovich in Kotlin Community
Максим
работает с reified T
А можно то же самое, но не скриншотом?
источник

М

Максим in Kotlin Community
Vladimir Petrakovich
А можно то же самое, но не скриншотом?
typealias MyScope = Scope<String, String>

data class Scope<C,  S> (val someC: C, val someS: S)

val scope = MyScope(someC = "thisIsC", someS = "thisIsS")

val scopes: HashMap<String, Scope<*, *>> = hashMapOf()

inline fun <reified T> Any?.isType() = this is T

fun main() {

   scopes["muScopeKey"] = scope


   val result1 = scopes["muScopeKey"] is MyScope
   val result2 = scopes["muScopeKey"].isType<MyScope>()
   println("result2 $result2 ")

}
источник

М

Максим in Kotlin Community
знал что попросите)
источник

BV

Boris Vanin in Kotlin Community
Так MyScope это же не настоящий тип
источник

BV

Boris Vanin in Kotlin Community
Проверяется, что это скоуп, какие дженерики туда не передай
источник

М

Максим in Kotlin Community
Boris Vanin
Проверяется, что это скоуп, какие дженерики туда не передай
источник

М

Максим in Kotlin Community
да нет же, не проверяется
источник

BV

Boris Vanin in Kotlin Community
Максим
да нет же, не проверяется
Почему нет? Он же true вернёт, тайпалиас тут вообще непричем
источник

BV

Boris Vanin in Kotlin Community
Именно из за этого прямой is запрещён
источник

М

Максим in Kotlin Community
Boris Vanin
Почему нет? Он же true вернёт, тайпалиас тут вообще непричем
он ничего не вернул потому что не скомпилился
источник

BV

Boris Vanin in Kotlin Community
Потому что компилятор не может проверить, а если спрятать за дженериком, то компилятор проверит что сможет
источник

М

Максим in Kotlin Community
Boris Vanin
Почему нет? Он же true вернёт, тайпалиас тут вообще непричем
а никто и не говорил про алиас, речь о приведении и проверке типа
источник

BV

Boris Vanin in Kotlin Community
Так вроде всё логично работает
источник

BV

Boris Vanin in Kotlin Community
Если компилятор может понять, что ерунда написана, он об этом говорит, если спрятать ерунду от компилятор за дженериком, он не понимает и не говорит, я об этом
источник

М

Максим in Kotlin Community
Boris Vanin
Если компилятор может понять, что ерунда написана, он об этом говорит, если спрятать ерунду от компилятор за дженериком, он не понимает и не говорит, я об этом
на стаке пишут что это всё проверяется корректно
источник

М

Максим in Kotlin Community
думаю раз в компиляторе есть такие слова как inline fun <reified T> то он понимает что они значат
источник

BV

Boris Vanin in Kotlin Community
Максим
на стаке пишут что это всё проверяется корректно
Просто знамени тип проверки на <Int, Int> и увидишь насколько правильно он проверяет
источник

М

Максим in Kotlin Community
действительно, проверка не работает
источник

М

Максим in Kotlin Community
Boris Vanin
Просто знамени тип проверки на <Int, Int> и увидишь насколько правильно он проверяет
как тогда проверить ?
источник