在Kotlin中将List <string>强制转换为List <t>

时间:2018-08-22 06:55:41

标签: casting kotlin

我需要创建一个通用方法来拆分字符串并强制转换值

inline fun <reified T: Any> convertFromString(myString: String) : List<T>{
    val castedList = ArrayList<T>()
    for(item in  myString.split(";")){
        castedList.add(item as T)
    }
    return castedList
}

我将此方法称为convertFromString<Int>("1;2;3;4;5;6"),并期望得到输出List<Int>,但是在强制转换item as T期间失败。

如何将所有值都转换为通用T

1 个答案:

答案 0 :(得分:4)

我宁愿建议您提供转换功能,例如

inline fun <T: Any> convertFromString(myString: String, transformation: (String) -> T)
                                                      = myString.split(";")
                                                                .map(transformation)
                                                                .toList()

请注意,您无法将String投射到String之后的其他任何地方,这就是item as T无法正常工作的原因。使用转换功能,可以确保正确转换(只要您不使用item as T作为转换;-)。

一些示例用法/转换功能可能是:

val doubleList = convertFromString("123;123") { it.toDouble() }
val intList = convertFromString("123;123") { it.toInt() }
val objList = convertFromString("data=123;data=444") { yourParser.parse(it) }

除此之外,您不再需要reifiedinline对于包含lambda函数的任何函数仍然有用。