Kotlin将字符串值转换为正确的表示形式
我有一个接受Kotlin将字符串值转换为正确的表示形式,kotlin,Kotlin,我有一个接受值:String?的方法。该方法的目的是将字符串值转换为正确的表示形式。例如: “true”->具有真值的布尔值 “20”->包含20的整数 “1223.2”->多臂机 在Koltin实现这一结果的最有效/简洁的方法是什么 更新 这是我目前的代码: private fun insertRealType(map: WritableMap, key: String, value: String?) { val test = getValueType(value) wh
值:String?
的方法。该方法的目的是将字符串值转换为正确的表示形式。例如:
“true”->具有真值的布尔值
“20”->包含20的整数
“1223.2”->多臂机
在Koltin实现这一结果的最有效/简洁的方法是什么
更新
这是我目前的代码:
private fun insertRealType(map: WritableMap, key: String, value: String?) {
val test = getValueType(value)
when (test) {
is String -> map.putString(key, test)
is Boolean -> map.putBoolean(key, test)
is Int -> map.putInt(key, test)
is Double -> map.putDouble(key, test)
else -> map.putNull(key)
}
}
private fun getValueType(value: String?): Any {
var returnValue: Any?
returnValue = value?.toDoubleOrNull()
if (returnValue != null)
return returnValue
returnValue = value?.toIntOrNull()
if (returnValue != null)
return returnValue
// ETC......
}
这完全取决于您对“正确”表示的解释。例如,“0”
的值可以是Int
或false布尔值
这里您将面临的另一个问题是,您必须以任何一种方式动态地强制转换变量。如果您选择从该字符串创建一个JSONObject
,并从中生成一个列表
,或者即使您编写了自己的方法将字符串值转换为对象
,您仍然需要将所述对象转换为其适当的形式(可能需要使用is
操作符检查其类型)。为了让您有一个这样抽象的方法,您必须手动处理强制转换它的泛型结果
我可以为您提供一个比这样的概念性答案更实用的答案,但您需要提供一些代码到目前为止,您的代码是什么样子的?这不是一个代码编写服务。@zsmb13这里是一个示例代码片段,我一直在努力更正。但是,我知道“1”和“0”对我来说不是布尔值。此外,我还发布了一个代码片段,我作为一个样本进行了研究。我知道,按照惯例,大多数人可以同意字符串文本的类型。我只是在说明一些陷阱。我检查了你的代码片段,我不得不问,它怎么了?到目前为止,您的代码的逻辑是正确的!只要不断检查您在getValueType()
中支持的其他类型,我对Kotlin比较陌生,所以我想可能有一些扩展/快捷方式我还不熟悉。@TareKKhoury-可能在Kotlin stdlib的某个地方隐藏了一些东西,但这个要求非常具体。如果这对应于(比如)JSON转换,那么您最好使用专用JSON库(例如Jackson)。我同意@OliverCharlesworth的观点,即如果转换对应于您所寻求的内容,则使用专用JSON库。我还可以肯定地告诉您,来自Java背景的这种类型推断必须手动完成。我几乎完全肯定科特林也是如此。看看,这几乎就是你所做的!