【问题标题】:an expression of type Null is ineligible for implicit conversionNull 类型的表达式没有资格进行隐式转换
【发布时间】:2016-02-04 14:22:02
【问题描述】:

当这样做时:

  def myfunction(line: String): (Int, Option[DateTime], Option[Int]) = {
    // do some stuff
    (5, Option(null), Option(null))
  }

我得到以下信息:

Null 类型的表达式不能进行隐式转换

我不知道如何解决它。

【问题讨论】:

  • Int 不属于null
  • 为了改进 Lee 的提示:在适用的情况下,Int 将映射到来自 JVM 的原始 Int。因此,在任何情况下都不能将 null 用于 Int。
  • 在 Scala 中写 null 有点令人厌恶......
  • 把这件事告诉 scalamock 人...
  • @BoristheSpider True exept 在处理数据库行时:null 有一个重要的含义,不能使用Option 作为替代。特别是使用spark udfs 需要正确处理。这很棘手。

标签: scala null


【解决方案1】:

Option(null) 的下限为Option[Null],其中Null 是所有引用类型的底部类型。 Int 是值类型,而不是引用类型。即您不能将null 分配给Int。所以你不能将Option[Null] 分配给Option[Int]

请改用Option.empty[Int]None

【讨论】:

    【解决方案2】:

    一种选择是使用 Java 本机类。例如:java.lang.Int

      def myfunction(line: String): (Int, Option[DateTime], Option[java.lang.Int]) = {
            // do some stuff
            (5, Option(null), Option(null))
      }
    

    如果方法的参数之一也定义了原始类型,这也有效。您可以使用 null、scala.Int 或 java.lang.Int 来调用它,编译器会全部搞定。例如:

     def myfunction(lineCount: java.lang.Integer): (Int, Option[java.lang.Integer], Option[java.lang.Integer]) = {
      // do some stuff
      (5, Option(lineCount), Option(null))
    }
    

    注意:当然,您应该避免在 scala 中使用 null,但在使用 java 时可能会出现这种情况。

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 2013-08-18
      • 2018-03-14
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2011-01-06
      相关资源
      最近更新 更多