我正在尝试使用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
这一事实。但是我无法找到解决这个问题的方法,但是无法想象这个库的整个部分因此无法使用。
我该怎么办?
答案 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))