1

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

但是,我一直遇到打字问题。我将问题缩小到以下示例。

PluggableRenderContext 在 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]"

据我了解,这些类型在概念上是兼容的:ConstantTransformeris-aTransformer[Object, Shape]Ellipse2Dis-a Shape

我认为这归结为 ScalaInt不是Object. 但是,我无法找到解决此问题的方法,但无法想象库的整个部分会因此变得不可用。

我能做些什么呢?

4

1 回答 1

1

您可能需要在类型方面给 scala 一些帮助。我不确定这是否可行,但您可以尝试输入ConstantTransformer

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

更新

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

  val vertexShapeTransformer: Transformer[_ >: Integer, Shape] =
    new ConstantTransformer(new Ellipse2D.Float(-10,-10,20,20))
于 2013-03-28T19:46:50.987 回答