2016-07-13 11 views
0

Dieser Code ist in Ordnung. Wenn ich jedoch ArrayList<Long> anstelle von Long[] als meinen Wert verwenden möchte, stoße ich in ein kleines Problem: Ersetzen Long[].class mit ArrayList<Long>.class funktioniert nicht. Ich nehme an, das liegt daran, dass das Vorlagenobjekt dynamisch kompiliert wurde und keine vorhandene .class-Datei hat. Was sollte ich stattdessen verwenden?Wie erstellt Cache mit ArrayList <Long> als Werte mit Ehcache 3?

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); 
    } 
} 

Antwort

0

Sie treffen hier die Einschränkungen von Generika in Java. Sie müssen bei List.class in der Typinformation bleiben, die Sie den Cache bereitstellen.

Dies hindert Sie nicht daran, den Cache als Cache<Long, List<Long>> zu deklarieren, aber es wird an einigen Stellen Warnungen erzeugen und Sie müssen möglicherweise einige Umwandlungen während der Konfiguration vornehmen.

+0

Vielen Dank. Das hätte ich nie durch Raten und Prüfen herausgefunden: D – BAMF4bacon