Как установить неявное значение Scala в коде Java? - PullRequest
0 голосов
/ 06 ноября 2018

у меня есть класс scala с приведенным ниже определением:

object EigenvectorCentrality extends VertexMeasure[Double]{
  override def compute[VD:ClassTag, ED:ClassTag](graph: Graph[VD, ED],vertexMeasureConfiguration: VertexMeasureConfiguration[VD,ED])(implicit num:Numeric[ED]): Graph[Double, ED] = computeEigenvector(graph,vertexMeasureConfiguration)

}

Теперь я хочу вызвать функцию вычисления этого класса из кода Java, но я не знаю, как установить последний параметр функции вычисления (Numeric [ED]). я вызываю эту функцию, как показано ниже:

EigenVectorCentrality.compute(mygraph,mygraph.vertices.vdtag,mygraph.vertices.vdtag,Numeric.Int)

но получите эту ошибку: Could not find Implicit value for parameter num : Numeric[ED]

этот класс относится к Spark Graphx. Вы знаете, как установить неявную переменную scala в Java?

1 Ответ

0 голосов
/ 06 ноября 2018

Что такое ED? Вы должны передать тот же объект, который Scala выбирает при выполнении неявного разрешения. Предполагая, что ED равно Double, вы должны передать объект DoubleIsFractional, который написан как DoubleIsFractional$.MODULE$ в Java.

EigenVectorCentrality.compute(mygraph,mygraph.vertices.vdtag,mygraph.vertices.vdtag,DoubleIsFractional$.MODULE$)

Если ED равно Int, вместо него должно быть IntIsIntegral$.MODULE$.

Если ED является примитивным типом, возникает дополнительная проблема с отображением примитивных типов Scala / Java. Предполагая, что ED равно int (т.е. Int в Scala), вы не можете иметь значение типа Numeric<int> в Java, только Numeric<Integer>, но такое неявное не определено по умолчанию в Scala.

...