lex
05/16/2018, 5:35 AMjonathan
05/16/2018, 5:37 AM// println(foo().reversed())
? Does it still work?lex
05/16/2018, 5:41 AMgildor
05/16/2018, 5:44 AMelihart
05/16/2018, 5:46 AMelihart
05/16/2018, 5:48 AMgildor
05/16/2018, 5:49 AMelihart
05/16/2018, 5:50 AMval
is a property in a class then I get the error, if it is a local variable in a function then it worksgpeal
05/16/2018, 5:50 AMopen class ClassA<T> {
open operator fun invoke(): T? = null
}
class ClassB<T : Any>(private val value: T) : ClassA<T>() {
override operator fun invoke(): T = value
}
class OtherClass {
private val foo: ClassA<String> = ClassB("123")
init {
if (foo is ClassB) {
// This smart casts to String
println(foo.invoke().reversed())
// This doesn't and is still String?
println(foo().reversed())
}
}
}
If I move foo inside of init
then it failslex
05/16/2018, 6:05 AMopen class ClassA<T> {
open operator fun invoke(): T? = null
}
class ClassB<T : Any>(private val value: T) : ClassA<T>() {
override operator fun invoke(): T = value
}
class Test {
val foo: ClassA<String> = ClassB("123")
init {
if (foo is ClassB) {
// This smart casts to String
println(foo.invoke().reversed())
// This doesn't and is still String?
println(foo().reversed())
// works!
println((foo)().reversed())
}
}
@Test
fun test() {
if (foo is ClassB) {
// This smart casts to String
println(foo.invoke().reversed())
// This doesn't and is still String?
println(foo().reversed())
// works!
println((foo)().reversed())
}
val foo: ClassA<String> = ClassB("123")
if (foo is ClassB) {
// This smart casts to String
println(foo.invoke().reversed())
// works!
println(foo().reversed())
// works!
println((foo)().reversed())
}
}
}
lex
05/16/2018, 6:05 AM// This doesn't and is still String?
println(foo().reversed())
// works!
println((foo)().reversed())
gpeal
05/16/2018, 7:19 AMif (is Success)
block.
Kotlin then warns about a useless cast which I have to suppresslex
05/16/2018, 8:00 AMgpeal
05/16/2018, 3:54 PMgpeal
05/16/2018, 4:00 PMlex
05/17/2018, 3:50 AM(foo as Success)()
is needless, sufficiently round brackets (foo)()
needed for workaround buggpeal
05/17/2018, 6:04 AMlex
05/17/2018, 6:15 AM