如何在 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 在进行隐式解析时选择的同一对象。假设ED
是Double
,你应该传递DoubleIsFractional
对象,在Java中写成DoubleIsFractional$.MODULE$
。
EigenVectorCentrality.compute(mygraph,mygraph.vertices.vdtag,mygraph.vertices.vdtag,DoubleIsFractional$.MODULE$)
如果ED
是Int
,应该是IntIsIntegral$.MODULE$
。
如果 ED
是原始类型,映射 Scala / Java 原始类型会有额外的麻烦。假设 ED
是 int
(即 Scala 中的 Int
),在 Java 中不能有类型 Numeric<int>
的值,只有 Numeric<Integer>
,但是这种隐式在 Scala 中没有默认定义。
我有一个 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 在进行隐式解析时选择的同一对象。假设ED
是Double
,你应该传递DoubleIsFractional
对象,在Java中写成DoubleIsFractional$.MODULE$
。
EigenVectorCentrality.compute(mygraph,mygraph.vertices.vdtag,mygraph.vertices.vdtag,DoubleIsFractional$.MODULE$)
如果ED
是Int
,应该是IntIsIntegral$.MODULE$
。
如果 ED
是原始类型,映射 Scala / Java 原始类型会有额外的麻烦。假设 ED
是 int
(即 Scala 中的 Int
),在 Java 中不能有类型 Numeric<int>
的值,只有 Numeric<Integer>
,但是这种隐式在 Scala 中没有默认定义。