我正在尝试将一堆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"))
^
谢谢, 约翰
答案 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"))
顺便说一下,你删除了错误所在行的“^”标记。请在粘贴错误消息时保留它。