如何用Scala和Int作为顶点在JUNG2中实例化Transformer?

时间:2013-03-28 18:00:42

标签: scala jung

我正在尝试使用JUNG2为可视化中的节点的形状和大小创建自己的Transformer

然而,我一直在遇到打字问题。我将我的问题缩小到以下示例。

PluggableRenderContext in JUNG执行ConstantTransformer的简单实例化,其中V是顶点类型:

protected Transformer<V,Shape> vertexShapeTransformer = 
    new ConstantTransformer(
    new Ellipse2D.Float(-10,-10,20,20));

但是,如果我在Scala中进行自己的实例化,那么

val vertexShapeTransformer: Transformer[Int, Shape] =
  new ConstantTransformer(new Ellipse2D.Float(-10,-10,20,20));

我收到输入错误:

type mismatch;
found: org.apache.commons.collections15.functors.ConstantTransformer[java.awt.geom.Ellipse2D.Float]
required: org.apache.commons.collections15.Transformer[Int,java.awt.Shape]"

据我了解,这些类型在概念上是兼容的:ConstantTransformer是 - Transformer[Object, Shape]Ellipse2D是 - Shape

我认为可归结为Scala的Int不是Object这一事实。但是我无法找到解决这个问题的方法,但是无法想象这个库的整个部分因此无法使用。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可能需要为scala提供一些类型的帮助。我不确定这是否有效,但您可以尝试输入ConstantTransformer

  val vertexShapeTransformer: Transformer[Int, Shape] =
    new ConstantTransformer[Shape](new Ellipse2D.Float(-10,-10,20,20))

<强>更新

这应该可行,你可以传递给Transformer的类型是Integer(而不是Int):

  val vertexShapeTransformer: Transformer[_ >: Integer, Shape] =
    new ConstantTransformer(new Ellipse2D.Float(-10,-10,20,20))