如何在Scala中表达Vaadin BeanItemContainer构造函数?

时间:2010-12-12 01:37:55

标签: scala vaadin

我正在尝试将一堆com.mongodb.DBObject对象加载到Vaadin BeanItemContainer中以显示在表中。我陷入了从Java到Scala的构造函数的转换。

构造函数定义是:

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)}

有任何想法/建议吗?

更新:
尝试:

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 个答案:

答案 0 :(得分:2)

您使用Class.forName的任何原因?我不认为编译器可以从该调用中推断返回对象的类型,它只是Class[_]。如果使用classOf,则应让编译器确定类型:

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

换句话说:Java中的DBObject.class会转换为Scala中的classOf[DBObject]

答案 1 :(得分:0)

试试这个:

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

顺便说一下,你删除了错误所在行的“^”标记。请在粘贴错误消息时保留它。