当尝试将通用字符串实现为数字字符串扩展方法时,我开始使用Ri化关键字。以下是编译和运行的,但我希望在将其用于生产代码之前对其进行改进:
inline fun <reified T> String.convertTo():T {
return when(T::class.simpleName){
Int::class.simpleName->{(this.toIntOrNull() ?: 0) as T}
Float::class.simpleName->{(this.toFloatOrNull() ?: 0f) as T}
Double::class.simpleName->{(this.toDoubleOrNull() ?: 0.0) as T}
else -> throw IllegalArgumentException("Can't convert type $(T::class.simpleName)")
}
}
我喜欢consise呼叫者代码:
val time:Int by lazy {((evaluateExpression("time").convertTo<Float>().times(1000f))).toInt()}
如果在这种情况下可能的话,我想做两件事:
1)我无法找到正确的语法来将reified t限制为只允许的类型-我想用尽when条件并删除else->throw
2)t::Case.java不能正确地与其他类型的类类型(即int::类.java)进行比较,所以我求助于比较简单名字串——什么更好?
有没有办法限制类型和比较类类型的更好方法?