我遇到了Scala和Java互操作性的问题,谷歌和SO似乎没有用(我见过类似的问题,但没有一个为我的案例提供了可行的解决方案)。
我用Java创建了一个jar文件(托管here,如果你需要它来回答这个问题),它包含一个带有静态方法的类。但是,我似乎无法从Scala访问此静态方法。这是代码:
val graph1 = ...
val graph2 = ...
val union = DirectedGraph.merge(graph1, graph2)
该方法存在,我可以使用普通的Java代码访问它。实际上,以下有效:
DirectedGraph<OWLClass> graph1 = ...;
DirectedGraph<OWLClass> graph2 = ...;
DirectedGraph<OWLClass> union = DirectedGraph.merge(graph1, graph2);
我已经检查过java和scala使用的jar文件是否相同。我还检查了方法是否确实存在javap
。
有没有想法可以理解并可能解决这个问题?
答案 0 :(得分:2)
最可能的原因(根据我的经验)是Java编译器将注释视为可选,因此如果您的某个依赖项使用注释并且没有包含此注释的依赖项,则编译没有问题。但是,Scala编译器认为这是一个错误。您可能需要查看DirectedGraph
源及其超类型。