2010-12-12 3 views
2

私はcom.mongodb.DBObjectオブジェクトの束をVaadin BeanItemContainerにロードしてテーブルに表示しようとしています。私は、JavaからScalaへのコンストラクタの翻訳に悩まされています。ScalaでVaadin BeanItemContainerコンストラクタを表現するにはどうすればよいですか?

コンストラクタの定義は次のとおりです。

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

:JavaでDBObject.classはScalaではclassOf[DBObject]に変換されます。

+0

ありがとうございます。私はclassOfを忘れた。私は同じ結論に達しましたが、もう少し簡単でした。 val bic = new BeanItemContainer(classOf [DBObject])を使用することができます。つまり、DBObjectはBeanであると言われるのが好きではないので、IndexedContainerを使用して手動で入力します。 – jxstanford

0

はこれを試してみてください:

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

ところで、行のどこにエラーがあるかの "^"マーカーを削除しました。エラーメッセージを貼り付けるときは、そのまま保管してください。

+0

ああ、カラダについては申し訳ありません。私はそれを得たと思った。あなたが提案したコードもエラーをスローします。私はここでフォーマットできるとは思わないので、主な質問をエラーで更新しました。 – jxstanford

関連する問題