[英]scala pattern matching error java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;
[英]Intellij IDEA java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object
我有以下功能:
def removeLast(list: List[Int]): List[Int] = list match {
case List() => List()
case List(x) => List()
case x :: xs => x :: removeLast(xs)
}
当我定义它并从 sbt 控制台使用它时,一切正常。 但是当我在 Intellij IDEA 中创建一个工作表并尝试运行它时,会出现以下异常:
java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object; 在 week5.A$A26$A$A26.removeLast(lists.sc8362409100671270508.tmp:30) 在 #worksheet#.#worksheet#(lists.sc8362409100671270508.tmp:33)
此外,当我将最后一行更改为:
case x :: xs => 1 :: removeLast(xs)}
那么它的工作原理。
可能是什么问题?
我有这个问题。 同意 Andrzej,idea 使用自己的编译器,所以你必须以某种方式禁用它。 转到Settings->Scala->Worksheet并取消选中“在编译器进程中运行工作表” 。
在我的情况下,任何答案都没有用。 我仍然找到了一个对我有用的解决方案。这是 Scalatest 版本的问题。 在 pom.xml 升级到
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
有帮助
所以,虽然上面没有解决我的问题,但它与 intellij 相关。
基本上,它更喜欢 Scala SDK 来解析 Class::method 而不是从依赖项加载。
我用了
-详细:类
在 JVM 开关中让它向我显示它在寻找的位置; 立即让我知道它是因为它试图从 Scala SDK 加载类(它希望它从 Maven 中获取库)。
我真的只是从我的项目设置中删除了 Scala SDK,问题就消失了。 到目前为止,我使用 Scala 的经验(当然是在混合 Java 环境中)让我相信它有办法走向成熟。 这是一个如此基本的类/方法,我不敢相信它在版本之间消失了。 我安装的 Scala 版本是 2.11。 显然,从 maven 中获取的是 2.10.4。
任何时候你看到“NoSuchMethodError”总是意味着存在版本冲突; 这是一个为什么的问题。
就像这里的其他人所说的那样,我遇到了同样的问题,因为我有一些库使用 2.10,尽管在 2.11 上有 scalatest。
<!-- http://www.scalactic.org/ -->
<dependency>
<groupId>org.scalactic</groupId>
<artifactId>scalactic_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
<!-- http://www.scalatest.org/ -->
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
检查您使用的所有库都在同一个 Scala 版本中
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
到
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
具有作为属性
<properties>
<scala.tools.version>2.11.8</scala.tools.version>
<scala.version>2.11.8</scala.version>
<scalactic.version>3.0.0</scalactic.version>
<!-- Library Versions -->
<spark.version>2.0.0</spark.version>
....
</properties>
我刚刚遇到了同样的问题。 结果是我下载了错误版本的 Akka,其中包括 scala-library-2.10.x,而我的项目使用的是 2.11.6。 抓取最新版本的 Akka,包括 2.11.5,解决了这个问题。
所以,这似乎是一个兼容性问题,所以我将来会检查依赖项。
错误java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object
原因此错误特别是由于 spark 和 scala 之间的版本不匹配。 我在使用 spark 2.2.0 和 scala 2.10.6 时遇到了错误。 然后我换了不同的scala版本,但没有成功。
解决方法 仅当我将 scala 版本更改为 2.11.6 时才解决此错误。 此版本与 spark 2.2.0 完美匹配。 也许您可以针对同一问题尝试更高版本的 scala,但我尝试了 2.12.x 但没有奏效。
建议要求您在进行任何编码之前设置以下版本:spark - 2.2.0 scala - 2.11.6
我也使用了下面的 pom :
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
我通过将我的项目中的 scala sdk 版本从 2.12 设置为 2.11 解决了这个问题。
我也有同样的问题。 当您将其更改为使用地图功能时,它会起作用! 我不知道为什么,但这就是解决它的方法。
我发现这可能是由不同版本的 scalatest 和 scalamock 引起的。 下面的Maven
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId><!-- this was previously 2.10 -->
<version>2.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalamock</groupId>
<artifactId>scalamock-scalatest-support_2.11</artifactId>
<version>3.2</version>
<scope>test</scope>
</dependency>
添加json4
时我有同样的事情。 我通过将 artifactId 从json4s-native_2.12
为 - json4s-native_2.11
来解决它。 我想这与您使用的 scala 版本有关,我的版本是 2.11 而不是 2.12(您可以在pom.xml
文件的properties
xml 节点中看到您的版本,我的是: <scala.version>2.11</scala.version>
.)
这是版本问题,只需使用 scala sdk 版本到 2.11。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.