LocalDate.now()。plusMonths(m)的隐式数值加宽

Adr*_*ian 3 scala date intellij-idea

我在这样的隐式类中有以下代码:

object TenorOperations {
  implicit class TenorOperations(thiss: Tenor) {

    def toDate: LocalDate = thiss match {
      case Day(d) => LocalDate.now().plusDays(d)
      case Month(m) => LocalDate.now().plusMonths(m)
      case Year(y) => LocalDate.now().plusYears(y)
      case errorDate => throw new Exception("Unexpected date: "+errorDate)
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

它只是不会在IDEA中编译。

Error:(14, 47) implicit numeric widening
      case Day(d) => LocalDate.now().plusDays(d)
                                              ^
Error:(15, 51) implicit numeric widening
      case Month(m) => LocalDate.now().plusMonths(m)
                                                  ^
Error:(16, 49) implicit numeric widening
      case Year(y) => LocalDate.now().plusYears(y)
                                                ^
Run Code Online (Sandbox Code Playgroud)

这曾经工作。我该如何解决?

Ale*_*nov 7

看来你正在使用java.time.LocalDate,其中LocalDate.plusDays需要Long,而不是一个Int。通常,这将完美地编译,除非你们两个都这样做:1)打开-Ywarn-numeric-widen告诉Scala编译器在扩展转换发生时向您发出警告;2)打开-Xfatal-warnings以使警告变为错误。

您可以编写LocalDate.now().plusDays(d.toLong)(等)以使转换明确。