我需要创建一个通用方法来拆分字符串并强制转换值
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
?
答案 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) }
除此之外,您不再需要reified
。 inline
对于包含lambda函数的任何函数仍然有用。