如何在 java 代码中设置 scala 隐式值?

how to set scala Implicit value in java code?

我有一个 scala class,定义如下:

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 代码中调用此 class 的计算函数,但我不知道如何设置计算函数的最新参数 (Numeric[ED]) 。 我称这个函数如下:

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

但出现此错误: Could not find Implicit value for parameter num : Numeric[ED]

此 class 与 Spark Graphx 有关。你知道如何在java中设置scala的隐式变量吗?

什么是ED?您应该传递 Scala 在进行隐式解析时选择的同一对象。假设EDDouble,你应该传递DoubleIsFractional对象,在Java中写成DoubleIsFractional$.MODULE$

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

如果EDInt,应该是IntIsIntegral$.MODULE$

如果 ED 是原始类型,映射 Scala / Java 原始类型会有额外的麻烦。假设 EDint(即 Scala 中的 Int),在 Java 中不能有类型 Numeric<int> 的值,只有 Numeric<Integer>,但是这种隐式在 Scala 中没有默认定义。