1
我試圖創建自己的Transformer
可視化節點的形狀和大小與JUNG2。如何用Scala和Ints作爲頂點在JUNG2中實例化變壓器?
但是,我一直在輸入問題。我將問題縮小到以下示例。
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]"
As far據我所知,這些類型在概念上是兼容的:ConstantTransformer
is-a Transformer[Object, Shape]
和Ellipse2D
is-a Shape
。
我認爲這歸結爲斯卡拉的Int
不是Object
。雖然我找不到解決這個問題的辦法,但是無法想象這個庫的整個部分都會因此而無法使用。
我該怎麼辦呢?
錯誤依然存在。它說:發現:ConstantTransformer [Shape]需要:Transformer [Int,Shape](ConstantTransformer [Shape]的類型是Transformer [Object,Shape])。我覺得這是正確的類型(即按照預期),只是Scala的「Int」不是「Object」,Scala和Java類型之間的隱式轉換在這裏不起作用。 – notan3xit
如果將int更改爲Object或其他東西,它會工作嗎? AnyRef? – Noah
首先,它需要是Integer而不是Int,因此我們可以滿足對象依賴性,並且它需要是不可逆的。如果斯卡拉可以選擇這個,那會很好,但現在至少可以用Shape來完成。 – Noah