Cache2k:java.lang.UnsupportedOperationException:加载器未设置

Cache2k: java.lang.UnsupportedOperationException: loader not set

Cache2k 看起来是一个非常有前途的缓存实现。不幸的是,文档非常有限,这就是为什么我需要一些帮助来解决以下问题。我使用的是最新版本 0.26-BETA。

根据文档,缓存应该这样创建:

Cache<String,String> c =
CacheBuilder.newCache(String.class, String.class).build();
String val = c.peek("something");
assertNull(val);
c.put("something", "hello");
val = c.get("something");
assertNotNull(val);
c.destroy();

不幸的是,这些方法中至少有 2 个已被弃用,包括 CacheBuilder class 本身。因此,我尝试像这样创建缓存:

        org.cache2k.Cache<String, Object> newCache = Cache2kBuilder.of(String.class, Object.class)
                .name(cacheKey.toString())
                .entryCapacity(100000)
                .eternal(true)
                .build();

然而,这会引发 "java.lang.UnsupportedOperationException: loader not set" 异常。

因此问题是:我应该如何构建缓存才能避免出现此异常?

编辑:

这给了我同样的例外:

            org.cache2k.Cache<Object, Object> newCache =
                CacheBuilder.newCache(Object.class, Object.class)
                        .eternal(true)
                        .build();

编辑#2:

请注意一点:当我从 wiki 页面复制并粘贴代码时出现错误 - 如下图所示。

您测试的 jdk 版本是什么?我将尝试暂时删除导致问题的 <>。

非常感谢!

迈克尔

Cache2k looks like a very promising caching implementation.

谢谢:)

According to the documentation the cache is supposed to be created like this

有新界面。已弃用的仍然存在以支持旧 cache2k 版本的用户。这将在接下来的几周内得到澄清。抱歉造成混淆。

最新的入门信息请看这里: https://github.com/cache2k/cache2k/blob/master/doc/src/docs/asciidoc/user-guide/sections/_start.adoc

This however throws the "java.lang.UnsupportedOperationException: loader not set" exception. The question therefore is: how am I supposed to build the cache so that I do not get this exception?

简短回答:要么使用 cache.peek() 要么等待 0.27,从那时起它就可以透明地使用 cache.get()

更长的答案:在我们自己的应用程序中,我仅在定义加载程序时使用 cache.get(),而在未定义加载程序或我只想检查缓存时使用 cache.peek()。保留 cache.get() 仅供阅读使用,似乎是个好主意。但是,我认为这可能是对新用户的警告,因此我更改了该行为并将其与其他缓存解决方案保持一致。

对编辑 2 的回答: 对于无类型缓存,使用工厂方法 Cache2kBuilder.forUnkownTypes()。构造匿名 class 只有特定类型才需要。