Java 如何在Scala中使用JCache?我获取编译器类型错误:找到需要的字符串K

Java 如何在Scala中使用JCache?我获取编译器类型错误:找到需要的字符串K,java,scala,memcached,Java,Scala,Memcached,我正在学习并尝试在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) } 编译器错误是:

我正在学习并尝试在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
在cache.put中(键、值)

编辑:

正如Daniel所说,我应该在问题中提到,我对应用程序引擎已经厌倦了,因为这似乎非常相关。在本例中,解决方案是在Java中创建一个小类来执行此特定代码,并从Scala调用它。

问题似乎在于为
HashMap
提供正确的通用参数。我猜你想要的是:

val map = new HashMap[String, AnyRef]
请记住:Scala不允许使用原始类型

最好使用查看Scala推断出的
缓存
变量的类型,或者自己提供类型信息以查看其编译是否正常:

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

甚至是
缓存[\u,\u]
。您可能需要使用类似的方法来输入值:

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

我非常确定有一种方法可以不用
asInstanceOf
,使用完整的存在语法(
Cache[T,AnyRef]for some{type T}
),但我记不起是怎么做的(或者找到解释它的站点:)。

没有解决,使用:val Cache:Cache[String,AnyRef]=cacheFactory.getCache(新的HashMap[String,AnyRef])我得到了与以前相同的编译器错误:found:String,required:KIt看起来好像
javax.cache
库(如本文所述:)在混合参数化类型和原始类型时严重误用泛型。老实说,我不确定scala会用它做什么(正如我所说的,原始类型在scala中是非法的)。也许这是过时的文档?您可以尝试按要求使用REPL吗?只需打印出
CacheManager.getInstance.getCacheFactory的结果
-这将为您提供缓存实例的类型参数我没有使用scala解释器的经验,我正在尝试javax.cache.CacheManager.getInstance.getCacheFactory,但我得到错误“值缓存不是包javax的成员”@Damian-我猜您在运行控制台时,类路径上没有正确的JAR文件。Daniel在下面建议使用
cache.asInstanceOf[Map[String,AnyRef]]
可能是你需要做的事情运气不好,我不能使用asInstanceOf,我在运行时得到这个:java.lang.ClassCastException:com.google.appengine.api.memcache.stdimpl.GCache不能转换为java.util.HashMap(我在appengine上了),如果你在appengine上了,你应该在问题中提到这一点,因为这是非常相关的。在这种情况下,您应该在Java中创建一个小类来执行此特定代码,并从Scala调用它。我还认为任何java代码都可以从scala使用,任何java代码都可以从scala使用。是应用程序引擎对Scala(特别是asInstanceOf)生成的代码有问题。
cache.asInstanceOf[HashMap[String,AnyRef]].put(key, value)