此代码编译良好。但是,如果我想使用ArrayList<Long>
代替Long[]
作为我的价值,我会遇到一些麻烦:
用Long[].class
替换ArrayList<Long>.class
不起作用。我假设这是因为模板化的对象是动态编译的,并且没有现有的.class文件。我该怎么用呢?
public class junky{
PersistentCacheManager myStore;
String filename;
Cache<Long, Long[]> myCache;
public junky(String filename){
this.filename = filename;
myStore = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(this.filename))
.withCache("threeTieredCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(
Long.class, Long[].class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES)
.offheap(10, MemoryUnit.GB)
.disk(400, MemoryUnit.GB)
)
).build(true);
myCache = myStore.getCache("myCache", Long.class, Long[].class );
}
}
答案 0 :(得分:0)
您在这里遇到了Java中泛型的限制。您必须在提供缓存的类型信息中坚持使用List.class
。
这不会阻止您将缓存声明为Cache<Long, List<Long>>
,但它会在某些地方创建警告,并可能要求您在配置期间进行一些强制转换。