2013-12-19 5 views
0

У меня проблема с совместимостью с Scala и Java, которые Google и SO кажутся бесполезными (я видел похожие вопросы, но ни один из них не предлагал рабочего решения для моего случая).Не удается получить доступ к статическому методу Java из Scala

Я создал файл jar на Java (размещен 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 являются одинаковыми. И я также проверил, действительно ли метод существует с javap.

Есть ли идея, чтобы понять и, возможно, решить эту проблему?

+0

Какая ошибка? – smk

+0

Он выдает две ошибки: «ошибка при загрузке DirectedGraph, файл класса« fetchers.jar (pt/remoteowl/objects/DirectedGraph.class) »(класс scala.MatchError/class DirectedGraph (из класса scala.reflect.internal.Symbols $ ClassSymbol)) 'и' value merge не является членом объекта pt.remoteowl.objects.DirectedGraph' – jdferreira

+0

Было бы полезно узнать, какую точную версию Scala вы используете, поскольку «файл класса X сломан» имел различные причины в разных версиях. –

ответ

2

Наиболее вероятная причина (по моему опыту) заключается в том, что компилятор Java рассматривает аннотации как необязательные, так что, если одна из ваших зависимостей использует аннотацию и нет зависимости, которая содержит эту аннотацию, она компилируется без проблем. Однако компилятор Scala считает это ошибкой. Возможно, вы захотите посмотреть источник DirectedGraph вместе со своими супертипами.

+0

Это объясняет, почему Java не жалуется на банку, но Scala делает. Спасибо – jdferreira

+0

. Возникает вопрос и ответ http://stackoverflow.com/a/18600851/1148030 –

Смежные вопросы