2016-07-13 57 views
0

這段代碼編譯得很好。但是,如果我想使用ArrayList<Long>代替Long[]作爲我的價值,我遇到了一點小麻煩: 更換Long[].classArrayList<Long>.class不起作用。我認爲這是因爲模板對象是動態編譯的,並沒有現有的.class文件。我應該用什麼來代替?如何使用Ehcache 3構造使用ArrayList <Long>作爲值的緩存?

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

您在此處遇到Java中泛型的侷限性。您必須在提供緩存的類型信息中使用List.class

這不會阻止您聲明緩存爲Cache<Long, List<Long>>,但它會在某些地方創建警告,並可能需要您在配置期間執行一些轉換。

+0

非常感謝。我從來沒有想過通過猜測和檢查:D – BAMF4bacon

相關問題