如何使用 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>>,但它会在某些地方产生警告,并且可能需要您在配置期间进行一些转换。