如何在Java代码中设置Scala隐式值?

时间:2018-11-06 07:42:15

标签: java scala spark-graphx

我有一个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有关。你知道如何在Java中设置Scala的隐式变量吗?

1 个答案:

答案 0 :(得分:2)

什么是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中默认未定义。