Typecheck instructions are supported for reified T
This commit is contained in:
committed by
Andrey Breslav
parent
416ac7917b
commit
f3c49c605f
@@ -0,0 +1,20 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
inline fun<reified T> checkcast(x: Any?): T {
|
||||
return x as T
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val x = checkcast<String>("abc")
|
||||
assertEquals("abc", x)
|
||||
val y = checkcast<Int>(1)
|
||||
assertEquals(1, y)
|
||||
|
||||
try {
|
||||
val z = checkcast<Int>("abc")
|
||||
} catch (e: Exception) {
|
||||
return "OK"
|
||||
}
|
||||
|
||||
return "Fail"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
inline fun<reified T> Array<Any>.filterIsInstance(): List<T> {
|
||||
return this.filter { it is T }.map { it as T }
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val src: Array<Any> = array(1,2,3.toDouble(), "abc", "cde")
|
||||
|
||||
assertEquals(arrayListOf(1,2), src.filterIsInstance<Int>())
|
||||
assertEquals(arrayListOf(3.0), src.filterIsInstance<Double>())
|
||||
assertEquals(arrayListOf("abc", "cde"), src.filterIsInstance<String>())
|
||||
assertEquals(src.toList(), src.filterIsInstance<Any>())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
inline fun<reified T> isinstance(x: Any?): Boolean {
|
||||
return x is T
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assert(isinstance<String>("abc"))
|
||||
assert(isinstance<Int>(1))
|
||||
assert(!isinstance<Int>("abc"))
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
inline fun<reified T> safecast(x: Any?): T? {
|
||||
return x as? T
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val x = safecast<String>("abc")
|
||||
assertEquals("abc", x)
|
||||
val y = safecast<Int>(1)
|
||||
assertEquals(1, y)
|
||||
|
||||
val z = safecast<Int>("abc")
|
||||
assertEquals(null, z)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user