2010-12-12 56 views
2

我想將一堆com.mongodb.DBObject對象加載到Vaadin BeanItemContainer中以在表中顯示。我遇到了構造函數從Java到Scala的轉換。如何在Scala中表達Vaadin BeanItemContainer construtor?

構造函數的定義是:

BeanItemContainer(Class<? extends BT> type) 

這通過Scala編譯器:

val bic = new BeanItemContainer(Class.forName("com.mongodb.DBObject")) 

然而,當我嘗試添加一個項目:

mtl.toArray.foreach {t => bic.addBean(t)} 

我得到以下錯誤:

[ERROR]com/sentientswarm/traderdashboard/UploadTradesWindow.scala:140: error: type mismatch; 
found : t.type (with underlying type com.mongodb.DBObject) 
required: ?0 where type ?0 
      mtl.toArray.foreach {t => bic.addBean(t)} 

有什麼想法/建議嗎?

UPDATE:
嘗試:

val bic: BeanItemContainer[DBObject] = new BeanItemContainer(Class.forName("com.mongodb.DBObject")) 

結果:

[ERROR]com/sentientswarm/traderdashboard/UploadTradesWindow.scala:140: error: type mismatch; 
found : java.lang.Class[?0(in value bic)] where type ?0(in value bic) 
required: java.lang.Class[_ <: com.mongodb.DBObject] 
      val bic: BeanItemContainer[DBObject] = new BeanItemContainer(Class.forName("com.mongodb.DBObject")) 
                        ^

感謝, 約翰

回答

2

您正在使用的任何原因Class.forName?我不認爲編譯器可以從該調用返回的對象中推斷出類型,它只是Class[_]。如果你使用classOf,應該讓編譯器確定類型:

val bic = new BeanItemContainer[DBObject](classOf[DBObject])) 

換句話說:DBObject.class在Java中轉化爲classOf[DBObject]斯卡拉。

+0

謝謝。我忘了班級。我得出了同樣的結論,但稍微簡單一些。你可以使用:val bic = new BeanItemContainer(classOf [DBObject])。也就是說,DBObject不喜歡被告知它是一個bean,所以我最終使用了一個IndexedContainer並手動填充它。 – jxstanford 2010-12-12 20:52:35

0

試試這個:

val bic: BeanItemContainer[BT] = new BeanItemContainer(Class.forName("com.mongodb.DBObject")) 

順便說一下,您刪除了錯誤所在行的「^」標記。請粘貼錯誤消息時保留它。

+0

啊,對克拉對不起。以爲我明白了。您建議的代碼也會引發錯誤。我更新了錯誤的主要問題,因爲我不認爲我可以在這裏格式化。 – jxstanford 2010-12-12 02:33:22