我有一个采用value
的方法,该方法必须为Boolean
,Float
,Int
,Long
或String
类型。有没有办法使此方法仅接受value
的那些类型,而不接受Any
并处理不正确的值,就像我对when()
语句所做的那样?
fun putValue(key: String, value: Any) {
when (value) {
is Boolean -> putBoolean(key, value)
is Float -> putFloat(key, value)
is Int -> putInt(key, value)
is Long -> putLong(key, value)
is String -> putString(key, value)
null -> return
}
}
答案 0 :(得分:3)
您可以重载该函数,以便允许的类型在编译时可供编译器使用。
步骤:
putValue
函数putXXX
重命名为putValue
(它们都具有相同的名称,并且它们的参数类型将重载)答案 1 :(得分:0)
它们唯一共有的接口(在继承层次结构的最下方)是Comparable<T>
。因此,您可以使用Generics并以此为上限来限制value
的类型:
fun <T: Comparable<T>> putValue(key: String, value: T?) {
when (value) {
is Boolean -> println("Boolean")
is Float -> println("Float")
is Int -> println("Int")
is Long -> println("Long")
is String -> println("String")
null -> return
}
}