2013-03-28 28 views
1

我試圖創建自己的Transformer可視化節點的形狀和大小與JUNG2如何用Scala和Ints作爲頂點在JUNG2中實例化變壓器?

但是,我一直在輸入問題。我將問題縮小到以下示例。

PluggableRenderContextin 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。雖然我找不到解決這個問題的辦法,但是無法想象這個庫的整個部分都會因此而無法使用。

我該怎麼辦呢?

回答

1

您可能需要給scala一些幫助。我不知道這是否會工作,但你可以嘗試鍵入ConstantTransformer

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

UPDATE

這應該工作,你可以通過在變壓器的類型是什麼,高達整數(不Int):

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

錯誤依然存在。它說:發現:ConstantTransformer [Shape]需要:Transformer [Int,Shape](ConstantTransformer [Shape]的類型是Transformer [Object,Shape])。我覺得這是正確的類型(即按照預期),只是Scala的「Int」不是「Object」,Scala和Java類型之間的隱式轉換在這裏不起作用。 – notan3xit

+0

如果將int更改爲Object或其他東西,它會工作嗎? AnyRef? – Noah

+0

首先,它需要是Integer而不是Int,因此我們可以滿足對象依賴性,並且它需要是不可逆的。如果斯卡拉可以選擇這個,那會很好,但現在至少可以用Shape來完成。 – Noah

相關問題