2017-01-09 4 views
1

Javaの地図に変更可能なマップを変換するように見えることはできませんsetterメソッドのコンパイラエラーを生成します。Scalaは私がScalaのアプリ内で使用していたJava POJOを持って

type mismatch; found : scala.collection.mutable.Map[String,com.me.myapp.Fizz] required: java.util.Map[Object,Object]

だから私はFOを追加することによって、java.util.MapctxMapを変換してみてくださいllowingのimport文:

import collection.JavaConversions._ 

その後にセッターの呼び出しを変更して:私はこれを行うとき

ctx.setContextMap(mapAsJavaMap(ctxMap)) 

しかし、私はまだ、コンパイラのエラーを取得:

type mismatch; found : scala.collection.mutable.Map[String,com.me.myapp.Fizz] required: scala.collection.Map[Object,Object] Note: String <: Object, but trait Map is invariant in type A. You may wish to investigate a wildcard type such as _ <: Object. (SLS 3.2.10)

任意のアイデアが何でありますかこのエラーの原因と修正点は何ですか?それが準拠していないオブジェクトを置くことが可能だろうが、より良い1は、おそらく最初の場所でMap[Object, Object]としてctxMapを宣言するだろう

ctx.setContextMap(mapAsJavaMap(ctxMap.asInstanceOf[mutable.Map[Object, Object]])) 

+0

「JavaConversions」の使用は推奨されていません。代わりに 'JavaConverters'と明示的な' .asScala'/'.asJava'を使用してください。 – maasg

答えて

1

1つのオプションは、Map[Object, Object]にマップをキャストすることです予期される[String, Fizz]タイプ:

val ctxMap : mutable.Map[Object, Object] = mutable.Map() 
// Some code that populates 'ctxMap' 
ctxMap.put("k", Fizz(1)) 

ctx.setContextMap(mapAsJavaMap(ctxMap)) 
関連する問題