【问题标题】:Kotlin cast String value to the correct representationKotlin 将字符串值转换为正确的表示形式
【发布时间】:2018-05-31 02:51:17
【问题描述】:

我有一个接受value: String? 的方法。该方法的目的是将字符串值转换为正确的表示形式。例如:

"true" -> a Boolean that has a true value

"20" -> an Int that contains 20

"1223.2" -> a Dobule

在 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......
}

【问题讨论】:

  • 到目前为止你的代码是什么样的?这不是代码编写服务。
  • @zsmb13 这是我一直在研究的示例代码 sn-p

标签: kotlin


【解决方案1】:

这完全取决于您对什么是“正确”表示的解释。例如,"0" 的值可能是 Int 或错误的 Boolean

您将在此处面临的另一个问题是您必须以任何一种方式动态转换变量。如果您选择从该字符串中创建一个JSONObject 并从中生成一个List<Object>,或者即使您编写了自己的将字符串值转换为Objects 的方法,您仍然需要将所述对象转换为其适当的形式(可能使用is 运算符检查其类型)。为了让你有一个这个抽象的方法,你必须手动处理它的通用结果。

我可以为您提供比这样的概念性答案更实用的答案,但您需要提供一些代码

【讨论】:

  • 正确。但是,你知道“1”和“0”对我来说不是布尔值。另外,我发布了一个代码 sn-p,我已经将其作为示例
  • 我知道按照惯例,大多数人可以就字符串文字的类型达成一致。我只是在说明一些陷阱。我检查了你的sn-p,我不得不问,它有什么问题?到目前为止,您的代码逻辑在正确的轨道上!继续检查您在 getValueType() 中支持的其他类型
  • 我对 Kotlin 比较陌生,所以我想也许有一些我还不熟悉的扩展/快捷方式。
  • @TareKKhoury - Kotlin 标准库中可能有一些东西,但这个要求非常具体。如果这对应于(比如说)JSON 转换,那么您最好使用专用的 JSON 库(例如 Jackson)。
  • 如果转换符合您的要求,我同意@OliverCharlesworth 关于使用专用 JSON 库的观点。我还可以肯定地告诉您,由于具有 Java 背景,这种类型推断必须手动完成。我几乎完全确定 Kotlin 也是如此。检查this,这几乎就是你所做的!
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 2011-05-06
  • 2012-01-06
  • 1970-01-01
  • 2018-01-23
  • 2010-11-02
相关资源
最近更新 更多