启用参数以接受多个类型作为输入,同时比使用“任何”更集中

时间:2018-10-15 21:28:52

标签: kotlin

我有一个采用value的方法,该方法必须为BooleanFloatIntLongString类型。有没有办法使此方法仅接受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
        }
    }

2 个答案:

答案 0 :(得分:3)

您可以重载该函数,以便允许的类型在编译时可供编译器使用。

步骤:

  1. 删除当前的putValue函数
  2. 将所有现有的特定类型的函数从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
    }
}