【问题标题】:What does this scala error mean about type mismatch? [closed]这个scala错误对类型不匹配意味着什么? [关闭]
【发布时间】:2021-01-14 01:15:44
【问题描述】:
type mismatch;
   found   : String => Int
   required: java.util.function.ToIntFunction[_ >: String]

我真的希望在人们写下“下一件大事”之前,他们有一些语言专家可以向他们解释错误消息可能是两件事之一

  1. 无意义的代码
  2. 一个完整的句子,向不懂该语言的人解释问题。

理性的存在,如果你理解语言(例如阅读手册),那么你只需要一个错误代码。但是如果你不懂语言(即首先会收到错误消息的人),那么你需要一个完整的句子,包括解释、示例问题和解决方案。

考虑节省的时间 - 所有可能犯错误的开发人员的总时间 - 与时间成本(开发人员 + 语言专家用示例编写解释性句子)。

【问题讨论】:

  • @bharal Minimal, Reproducible Example 会比哲学部分更有帮助。
  • @bharal “为什么不让语言变得更好呢?” 什么对你更好?错误很明显,你有一个String => Int,你需要一个java.util.function.ToIntFunction[_ >: String],如果你不理解两个类之间的区别,那么世界上没有错误消息可以帮助你。 - “所有必须学习一些未解释的任意逻辑的开发人员” 想表达在此示例中存在哪些未解释的任意逻辑? - “写更清晰解释的时间损失”这并不像你想象的那么容易,但给我一个更好的信息
  • @bharal 实际上,自 2.12-2.13 以来,语言已经得到了改进,这应该可以工作。只是您使用的不是最新版本(或者可能由于库依赖关系而无法使用最新版本)。
  • @bharal 所以你不会区分 Java 语言(如 Scala)、Java 字节码和 Java 虚拟机。
  • @bharal “错误可以举例说明什么会导致这样的消息,以及如何解决它。”错误指向导致这样的确切行信息;提供任意示例不仅非常困难,而且大多无用,因为您的具体代码失败了。关于如何修复它,同样在非常复杂的一般意义上,可能有无数种解决方案;但是,如果您愿意,可以搜索名为 typed hole 的东西,它与您想要的有点接近。

标签: scala types type-mismatch scala-java-interop


【解决方案1】:

String => Intscala.Function1[String, Int] 即 Scala 函数类型。

java.util.function.ToIntFunction[String] 是 Java 函数类型。

在 Scala 2.12+ 中,它们应该是可互换的,在早期版本的 Scala 中,您应该将它们相互转换。

How to use Java lambdas in Scala (answer #2)

ToIntFunction[_ >: String] 表示情况可能会稍微复杂一些,因为它涉及存在类型,但如果没有可重现的代码示例,很难说得更好。


试试

//libraryDependencies += "org.scala-lang.modules" %% "scala-java8-compat" % "0.9.1"
import scala.compat.java8.FunctionConverters._
x.get("answers").findValuesAsText("id").stream().mapToInt(((valx:String) => Integer.parseInt(valx)).asJava).max().getAsInt

它是否有效或错误信息是否改变?

【讨论】:

  • 我刚刚去了 scala 2.12。我真的不明白如果我坚持下去,我会在 2.11 中做什么
  • @bharal 这应该是你的问题。
  • @bharal 具有相同错误消息的不同人可以有不同的修复。一般可以尝试加"org.scala-lang.modules" %% "scala-java8-compat" % "0.9.1"import scala.compat.java8.FunctionConverters._,加scalaFunction.asJava。您的代码示例不是最小的可重现性。现在我要猜x 有什么类型,x.....stream() 有什么类型。
  • @bharal 您似乎正在将一些 Java API 与 Scala 代码混合使用,提及您使用的框架/库可能会有所帮助。
  • @bharal 那么,.asJava 是否有效?
猜你喜欢
  • 2016-05-18
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多