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 只有特定类型才需要。
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 只有特定类型才需要。