Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从Scala访问Java静态方法_Java_Scala_Scala Java Interop - Fatal编程技术网

无法从Scala访问Java静态方法

无法从Scala访问Java静态方法,java,scala,scala-java-interop,Java,Scala,Scala Java Interop,我在Scala和Java的互操作性方面遇到了一个问题,Google和其他公司似乎对此毫无帮助(我见过类似的问题,但没有一个能为我的案例提供有效的解决方案) 我已经在Java中创建了一个jar文件(如果您需要它来回答这个问题,可以托管它),其中包含一个带有静态方法的类。然而,我似乎无法从Scala访问这个静态方法。代码如下: val graph1=。。。 val graph2=。。。 val union=DirectedGraph.merge(图1、图2) 该方法存在,我可以使用普通Java代码

我在Scala和Java的互操作性方面遇到了一个问题,Google和其他公司似乎对此毫无帮助(我见过类似的问题,但没有一个能为我的案例提供有效的解决方案)

我已经在Java中创建了一个jar文件(如果您需要它来回答这个问题,可以托管它),其中包含一个带有静态方法的类。然而,我似乎无法从Scala访问这个静态方法。代码如下:

val graph1=。。。
val graph2=。。。
val union=DirectedGraph.merge(图1、图2)
该方法存在,我可以使用普通Java代码访问它。事实上,以下工作:

DirectedGraph图形1=。。。;
DirectedGraph graph2=。。。;
DirectedGraph union=DirectedGraph.merge(graph1,graph2);
我检查了java和scala使用的jar文件是否相同。我还用
javap
检查了该方法是否确实存在


有没有办法理解并可能解决这个问题?

根据我的经验,最可能的原因是Java编译器将注释视为可选的,因此,如果您的一个依赖项使用注释,并且没有包含此注释的依赖项,则它编译时不会出现问题。但是,Scala编译器认为这是一个错误。您可能需要查看
DirectedGraph
源代码及其超类型。

它会引发两个错误:
加载DirectedGraph时出错,类文件“fetchers.jar(pt/remoteowl/objects/DirectedGraph.class)”被破坏(类scala.MatchError/class DirectedGraph(类scala.reflect.internal.Symbols$ClassSymbol))
值合并不是object pt.remoteowl.objects.DirectedGraph的成员,了解您使用的确切Scala版本会很有帮助,因为“类文件X被破坏”在不同版本中有各种原因。Scala版本2.10.1(OpenJDK 64位服务器VM,Java 1.7.025)您提供的罐子不是独立的;如果我尝试在Scala repl中使用它,我会得到“警告:找不到类pt.remoteowl.jar.Dependency-继续使用存根”。你确定那不是根本原因吗?除非您提供所需的所有依赖项,否则我无法在我自己的机器上复制它。问题确实是jar中缺少一个.class文件。非常感谢。这解释了为什么Java不会抱怨jar,而Scala会抱怨。谢谢这里是一个相关的问题和答案