Generics 番石榴缓存泛型错误

Generics 番石榴缓存泛型错误,generics,guava,Generics,Guava,尝试创建番石榴缓存时出现神奇错误: import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import java.util.concurrent.ConcurrentMap; public class Main { private static ConcurrentMap<Long, Object> cache = CacheBuilder

尝试创建番石榴缓存时出现神奇错误:

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;

import java.util.concurrent.ConcurrentMap;

public class Main {

    private static ConcurrentMap<Long, Object> cache = CacheBuilder
            .newBuilder()
            .build(new CacheLoader<Long, Object>() {
                @Override
                public Object load(Long key) throws Exception {
                    return null;
                }
            }).asMap();

}
import com.google.common.cache.CacheBuilder;
导入com.google.common.cache.CacheLoader;
导入java.util.concurrent.ConcurrentMap;
公共班机{
私有静态ConcurrentMap缓存=缓存生成器
.newBuilder()
.build(新的缓存加载程序(){
@凌驾
公共对象加载(长键)引发异常{
返回null;
}
}).asMap();
}
java编译错误:

Error:(17, 21) java: C:\JavaWorkspace\untitled\src\...\Main.java:17: incompatible types
found   : java.util.concurrent.ConcurrentMap<java.lang.Object,java.lang.Object>
required: java.util.concurrent.ConcurrentMap<java.lang.Long,java.lang.Object>
错误:(17,21)java:C:\JavaWorkspace\untitled\src\…\Main.java:17:不兼容类型
找到:java.util.concurrent.ConcurrentMap
必需:java.util.concurrent.ConcurrentMap
番石榴的版本是20.0 java版本是1.6

在使用Java1.8和Guava23.0时,这是可以的


问题是我只需要使用1.6 java

一些您可以使用的解决方法:

private static LoadingCache<Long, Object> cache = CacheBuilder
        .newBuilder()
        .build(new CacheLoader<Long, Object>() {
            @Override
            public Object load(Long key) throws Exception {
                return null;
            }
        });

private static ConcurrentMap<Long, Object> cacheMap = cache.asMap();
private static LoadingCache=CacheBuilder
.newBuilder()
.build(新的缓存加载程序(){
@凌驾
公共对象加载(长键)引发异常{
返回null;
}
});
私有静态ConcurrentMap cacheMap=cache.asMap();

您可以使用的一些变通方法:

private static LoadingCache<Long, Object> cache = CacheBuilder
        .newBuilder()
        .build(new CacheLoader<Long, Object>() {
            @Override
            public Object load(Long key) throws Exception {
                return null;
            }
        });

private static ConcurrentMap<Long, Object> cacheMap = cache.asMap();
private static LoadingCache=CacheBuilder
.newBuilder()
.build(新的缓存加载程序(){
@凌驾
公共对象加载(长键)引发异常{
返回null;
}
});
私有静态ConcurrentMap cacheMap=cache.asMap();

正如您所提到的,它可以在JDK 8上工作,因为在中引入了JDK 8

在JDK 6上,类型不匹配:

found   : ConcurrentMap<Object, Object>
required: ConcurrentMap<Long, Object>
找到:ConcurrentMap
必需:ConcurrentMap

因为在没有类型提示的情况下,
缓存的类型无法推断。

正如您所提到的,它在JDK 8上工作,因为在中引入了

在JDK 6上,类型不匹配:

found   : ConcurrentMap<Object, Object>
required: ConcurrentMap<Long, Object>
找到:ConcurrentMap
必需:ConcurrentMap

因为没有类型提示,
cache
的类型是无法推断的。

非常神奇的行为我见过非常神奇的行为我见过它的钢在提取额外变量时令人困惑摆脱问题。而且,并没有简单的方法可以将init加载缓存作为映射box@Xaerxess我有一个问题,我使用的是番石榴,我不确定这些操作是否正确,所以我想看看你是否能帮我解决。在提取额外变量以消除问题时,这会让人困惑。而且,并没有简单的方法可以将init加载缓存作为映射box@Xaerxess我有一个问题,我在使用番石榴,我不知道这些操作是否正常工作,所以我想看看你是否可以帮助我。