gpt4 book ai didi

scala - Scala似乎无法将可变映射转换为Java Map

转载 作者:行者123 更新时间:2023-12-02 10:46:22 24 4
gpt4 key购买 nike

我在Scala应用程序中使用了Java POJO:

public class AppRuntimeContext {
// Lots of stuff...
public Map<Object,Object> contextMap;

// Getters & setters, ctors, etc.
}

在我的Scala应用中:
val ctx : AppRuntimeContext = new AppRuntimeContext()
val ctxMap : Map[String,Fizz] = Map()
// Some code that populates 'ctxMap'
ctx.setContextMap(ctxMap)

这会在setter方法上产生编译器错误:

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



因此,我尝试通过添加以下import语句将 ctxMap转换为 java.util.Map:
import collection.JavaConversions._

然后通过将setter调用更改为:
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)



任何想法导致此错误的原因和解决方法是什么?

最佳答案

一种选择是将 map 转换为Map[Object, Object]:

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

更好的方法可能是首先将 ctxMap声明为 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))

关于scala - Scala似乎无法将可变映射转换为Java Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com