在 Kotlin 中将 List<String> 转换为 List<T>

Vit*_*lii 0 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
}
Run Code Online (Sandbox Code Playgroud)

我调用此方法convertFromString<Int>("1;2;3;4;5;6")并期望有输出,List<Int>但它在 cast 期间失败item as T

如何将所有值转换为 generic T

Rol*_*and 5

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

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

请注意,您不能将 the 转换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) }
Run Code Online (Sandbox Code Playgroud)

此外,使用这种方法,您不再需要reified。的inline但是仍然是含有lambda函数任何功能是有用的。