Amaranth
Amaranth

Reputation: 2491

CacheBuilder.newBuilder().build is ambiguous

I'm trying to use a snippet of code for a Stash plugin, but the compiler keeps giving me an error that I can't seem to solve. It's using com.google.common.cache.Cache (Guava)

 static final RepositorySettings DEFAULT_SETTINGS = new RepositorySettings(0);
 private final PluginSettings pluginSettings;

 private final Cache<Integer, RepositorySettings> cache = CacheBuilder.newBuilder().build(
        new CacheLoader<Integer, RepositorySettings>()
 {
    @Override
    public RepositorySettings load(@Nonnull Integer repositoryId)
    {
        @SuppressWarnings("unchecked")
        Map<String, String> data = (Map) pluginSettings.get(repositoryId.toString());

        return data == null ? DEFAULT_SETTINGS : deserialize(data);
    }
});

The .build is giving me the following error

The method build(CacheLoader<? super Integer,RepositorySettings>) is ambiguous for the type CacheBuilder<Object,Object>

Upvotes: 0

Views: 1850

Answers (1)

WonderWorld
WonderWorld

Reputation: 966

Cache has a build() method that takes no parameters, LoadingCache on the other hand has a build() method that takes CacheLoader as a parameter.

private final LoadingCache<Integer, RepositorySettings> cache = CacheBuilder.newBuilder().build(
                      new CacheLoader<Integer, RepositorySettings>() {
    @Override
    public RepositorySettings load(@Nonnull Integer repositoryId) {
    @SuppressWarnings("unchecked")
    Map<String, String> data = (Map) pluginSettings.get(repositoryId.toString());

    return data == null ? DEFAULT_SETTINGS : deserialize(data);
    }
}); 

This should work.

As reference: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

Upvotes: 1

Related Questions