【问题标题】:How to set a String in a Option[String]?如何在 Option[String] 中设置字符串?
【发布时间】:2017-11-20 19:05:19
【问题描述】:

当我试图在 Option[String] 类型的字段中影响 String 类型的值时,我收到以下错误:

type mismatch; found : String required: Option[String]

如何将值 myValue:String 影响到字段 myField:Option[String] 中?

【问题讨论】:

    标签: scala


    【解决方案1】:

    您也可以只使用 Option(myValue),它将 null 转换为 None,将非 null 转换为 Some

    【讨论】:

    • 您必须了解您的值是否等于“”(空字符串),这种情况下的选项将是 Some()
    • 正确,空字符串不等于null。
    【解决方案2】:

    您可以像这样将任何对象包装在 Option 中:

    val opt = Some("foo")
    

    【讨论】:

    • 请注意,您通常应该使用Option(...) 以避免得到Some(null),因为通常会传递变量而不是常量字符串。
    • 还要注意,如果你确实有一个常量字符串,最好使用Some("foo")
    【解决方案3】:

    您可以将对象包装在 Some 类中

    val myField = Some(myValue)
    

    或者如果你没有任何东西,通过

    None
    

    称为选项模式

    http://www.codecommit.com/blog/scala/the-option-pattern

    【讨论】:

    • Option(...) 已经为您做了一切。它将null 值替换为None 并将其他值包装在Some(...) 中。无需在代码中做任何区分。
    • 我的意思是解释选项模式,例如,如果您使用的是自定义 api,并且如果值为空,则不希望传递任何内容。
    【解决方案4】:

    如果要将空字符串转换为 None 更通用的解决方案是:Option(str).filter(_.nonEmpty)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 2022-07-06
      • 2012-01-28
      • 2011-03-07
      相关资源
      最近更新 更多