如何使用 Ehcache 3 以 ArrayList<Long> 为值构造缓存?
How to construct cache with ArrayList<Long> as values using Ehcache 3?
此代码编译正常。但是,如果我想使用 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 );
}
}
您在这里遇到了 Java 中泛型的限制。您必须在提供缓存的类型信息中坚持使用 List.class
。
这不会阻止您将缓存声明为 Cache<Long, List<Long>>
,但它会在某些地方产生警告,并且可能需要您在配置期间进行一些转换。
此代码编译正常。但是,如果我想使用 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 );
}
}
您在这里遇到了 Java 中泛型的限制。您必须在提供缓存的类型信息中坚持使用 List.class
。
这不会阻止您将缓存声明为 Cache<Long, List<Long>>
,但它会在某些地方产生警告,并且可能需要您在配置期间进行一些转换。