如何在scala中使用jcache?i get编译器类型错误:找到需要的字符串k

6mzjoqzu  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(223)

我正在学习scala并尝试在scala代码中使用javax.cache,但找不到解决此问题的方法:

val cacheFactory = CacheManager.getInstance.getCacheFactory
val map = new HashMap
val cache = cacheFactory.createCache(map)

def rawSet(key:String, value:Array[Byte]) {
    cache.put(key, value)
}

编译器错误是:
错误:类型不匹配
找到:字符串
要求:k
in cache.put(键,值)
编辑:
正如daniel所说,我应该在问题中提到,我对appengine过于关注,因为这似乎非常相关。在本例中,解决方案是在java中创建一个小类来执行此特定代码,并从scala调用它。

sqxo8psd

sqxo8psd1#

问题似乎在于为 HashMap . 我猜你想要的是:

val map = new HashMap[String, AnyRef]

记住:scala不允许使用原始类型。
使用repl来查看scala推断出您的 cache 变量,或自己提供类型信息以查看其编译是否正常:

val cache: Cache[String, AnyRef] = cacheFactory.getCache(map)
roqulrg3

roqulrg32#

尝试:

val cache: Cache[_, AnyRef] = cacheFactory.getCache(new HashMap[String, AnyRef])

甚至 Cache[_, _] . 您可能需要使用这样的方法来输入值:

cache.asInstanceOf[HashMap[String,AnyRef]].put(key, value)

我很确定有一种方法可以不用 asInstanceOf ,使用完整的存在语法( Cache[T, AnyRef] forSome { type T } ),但我想不起来是怎么回事(也找不到解释它的网站:)。

相关问题