2

我正在尝试将一堆 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"))
                                                                                      ^

谢谢,约翰

4

2 回答 2

2

你有什么理由使用Class.forName?我不认为编译器可以从该调用返回的对象中推断出类型,它只是Class[_]. 如果使用classOf,它应该让编译器确定类型:

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

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

于 2010-12-12T04:28:56.743 回答
0

试试这个:

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

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

于 2010-12-12T01:57:32.937 回答