using guava cache without a load function

14,100

CacheBuilder.build() returns a non-loading cache. Just what you want. Just use

Cache<String, String> cache = CacheBuilder.newBuilder().build();
Share:
14,100
Mike W
Author by

Mike W

Updated on June 13, 2022

Comments

  • Mike W
    Mike W almost 2 years

    My java app has a cache, and I'd like to swap out the current cache implementation and replace it with the guava cache.

    Unfortunately, my app's cache usage doesn't seem to match the way that guava's caches seem to work. All I want is to be able to create an empty cache, read an item from the cache using a "get" method, and store an item in the cache with a "put" method. I do NOT want the "get" call to be trying to add an item to the cache.

    It seems that the LoadingCache class has the get and put methods that I need. But I'm having trouble figuring out how to create the cache without providing a "load" function.

    My first attempt was this:

    LoadingCache<String, String> CACHE = CacheBuilder.newBuilder().build();
    

    But that causes this compiler error: incompatible types; no instance(s) of type variable(s) K1,V1 exist so that Cache conforms to LoadingCache

    Apparently I have to pass in a CacheLoader that has a "load" method.

    (I guess I could create a CacheLoader that has a "load" method that just throws an Exception, but that seems kind of weird and inefficient. Is that the right thing to do?)

  • CreativeManix
    CreativeManix almost 9 years
    For me it shows compile time error. it could not convert from <object,object> to <string,string> generic. I am using this lib for android.
  • Zai
    Zai almost 9 years
    @CreativeManix You have to use Cache class not LoadingCache.
  • CreativeManix
    CreativeManix almost 9 years
    Thanks @Zai I got it.
  • Eric Hartford
    Eric Hartford over 7 years
    wish that Google would explain this in the documentation - the only examples they give are LoadingCache.
  • alianos-
    alianos- over 6 years
    (edited previous comment). You can then use .getIfPresent(Object key) to retrieve stuff without providing a loader.