gpt4 book ai didi

scala - 从scala调用java代码时出现NoSuchMethodError

转载 作者:行者123 更新时间:2023-12-04 08:29:14 24 4
gpt4 key购买 nike

当我在 Scala REPL 控制台中执行以下代码时:

java.util.Collections.max(new java.util.ArrayList[String]())
NoSuchMethodError抛出异常:
java.lang.NoSuchMethodError: java.util.Collections.max(Ljava/util/Collection;)Lj
ava/lang/Comparable;
at .<init>(<console>:8)
at .<clinit>(<console>)
at .<init>(<console>:11)
at .<clinit>(<console>)
at $export(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:592)

at scala.tools.nsc.interpreter.IMain$Request$$anonfun$10.apply(IMain.sca
la:828)
at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:4
3)
at scala.tools.nsc.io.package$$anon$2.run(package.scala:31)
at java.lang.Thread.run(Thread.java:662)

斯卡拉 2.9.0.1,Java 1.6.0_25

为什么这里会抛出异常?
从 Java 执行的相同代码的行为符合预期(抛出 NoSuchElementException)。

最佳答案

这是一个影响 Scala 2.8 和 2.9 的编译器错误,其中编译器不计算正确的删除方法签名。我不知道错误报告。

编译方法:

object Test { def main(a: Array[String]) {
val a = new java.util.ArrayList[String]()
java.util.Collections.max(a)
}}

结果转化为以下字节码:
public void main(java.lang.String[]);
Code:
Stack=2, Locals=3, Args_size=2
0: new #16; //class java/util/ArrayList
3: dup
4: invokespecial #18; //Method java/util/ArrayList."<init>":()V
7: astore_2
8: aload_2
9: invokestatic #24; //Method java/util/Collections.max:(Ljava/util/Collection;)Ljava/lang/Comparable;
12: pop
13: return

请注意,偏移量 9 处的字节码使用 Comparable 调用静态方法。返回类型,而实际 Collections.maxObject作为返回类型:
$ javap -p java.util.Collections | grep max
public static java.lang.Object max(java.util.Collection);

关于scala - 从scala调用java代码时出现NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com