2010-12-12 41 views
2

J'essaie de charger un tas d'objets com.mongodb.DBObject dans un Vaean BeanItemContainer à afficher dans une table. Je suis coincé sur la traduction du constructeur de Java à Scala.Comment exprimer un constructeur Vaadin BeanItemContainer dans Scala?

La définition du constructeur est:

BeanItemContainer(Class<? extends BT> type) 

Ce passe le compilateur scala:

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

Cependant, lorsque je tente d'ajouter un élément:

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

Je reçois le texte suivant erreur:

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

Des idées/des suggestions?

MISE À JOUR:
Essayé:

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

Résultat:

[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")) 
                        ^

Merci, John

Répondre

2

Une raison quelconque pour laquelle vous utilisez Class.forName? Je ne pense pas que le compilateur peut déduire le type de l'objet retourné à partir de cet appel, il serait juste Class[_]. Si vous utilisez classOf, il faut laisser le compilateur déterminer le type:

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

En d'autres termes: DBObject.class en Java se traduit classOf[DBObject] à Scala.

+0

Merci. J'ai oublié classOf. Je suis arrivé à la même conclusion, mais un peu plus simple. Vous pouvez simplement utiliser: val bic = new BeanItemContainer (classOf [DBObject]). Cela dit, DBObject n'aime pas qu'on lui dise que c'est un bean, alors j'ai fini par utiliser un IndexedContainer et le peupler manuellement. – jxstanford

0

Essayez ceci:

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

En passant, vous avez supprimé le marqueur "^" de l'endroit où se trouve l'erreur. S'il vous plaît, gardez-le lorsque vous collez des messages d'erreur.

+0

Ah, désolé pour le carat. Je pensais l'avoir. Le code que vous avez suggéré renvoie également une erreur. J'ai mis à jour la question principale avec l'erreur puisque je ne pense pas que je peux mettre en forme ici. – jxstanford