如何使用Ehcache 3将ArrayList <long>构造为缓存作为值?

时间:2016-07-13 19:57:10

标签: java arraylist ehcache

此代码编译良好。但是,如果我想使用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 );
    }
}

1 个答案:

答案 0 :(得分:0)

您在这里遇到了Java中泛型的限制。您必须在提供缓存的类型信息中坚持使用List.class

这不会阻止您将缓存声明为Cache<Long, List<Long>>,但它会在某些地方创建警告,并可能要求您在配置期间进行一些强制转换。