코틀린에서는 as와 is를 이용해 타입을 캐스팅할 수 있다.
아래 예제에서는 Any를 Int로 치환하고 있다.
fun test() {
val defaultValue: Any = 0
val value = defaultValue as Int
println("defaultValue $defaultValue value $value")
}
하지만 위 코드에서 Int가 아닌 다른 primitive type으로 치환을 시도하면 오류가 발생한다.
java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String
(java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
코틀린에서 안전하게 Type Casting을 수행하는 방법에는 2가지가 있다.
조건문을 이용해 type을 먼저 확인한 뒤 캐스팅을 진행하는 방법이다.
@Test
fun test() {
val defaultValue: Any = 0
var value: String
if (defaultValue is String) {
value = defaultValue
} else {
value = "-1"
}
println("defaultValue $defaultValue value $value")
}
is는 자료형을 비교하여 true, false를 리턴해주며 자바의 instanceof와 같은 역할을 한다.
fun main() {
var a : Int = 7
var b = "abc"
isTypeName(a)
isTypeName(b)
}
fun isTypeName(obj: Any) {
if (obj is Int) {
println("Type = Integer")
} else if (obj is Float) {
println("Type = Float")
} else if (obj is String) {
println("Type = String")
}
}