有什么方法可以获取由其他代码创建的缓存的底层键和值类型定义?此时我只知道缓存名称。我没有关于如何创建缓存的任何其他信息。缓存在这里是 Jcache。
javax.cache.Cache 缓存 = cachingService.getCache(cacheName);
在这里它被转换为Object,Object。但我想知道实际的键类型和值类型。
一旦你有一个Cache
可用的,你可以通过检查它来找出配置它的键/值类型Configuration
:
// assuming you already have a Cache object available:
javax.cache.configuration.Configuration cacheConfig = cache.getConfiguration(Configuration.class);
Class keyType = cacheConfig.getKeyType();
Class valueType = cacheConfig.getValueType();
Cache
现在,如果您不知道其配置的键/值类型选项,为了在使用 JCache 1.0 时获取自身,您唯一的选择是使用cacheManager.getCache(name)
. 然而,根据 JCache 1.0,这仅在Cache
未配置任何特定类型(即Object.class
键和值类型)时才有效,否则将失败IllegalArgumentException
(参见 [1])。本质上,你陷入了一个恶性循环。
此行为已在 JCache 1.1 中更新(请参阅 [2] 中的相关问题):现在cacheManager.getCache(name)
规范已放宽,并且可能返回Cache
给定名称是否存在,而不管配置的键/值类型如何。目前唯一的问题是 JCache 1.1 仅在几天前发布(2017 年 12 月 16 日,参见 [3]),因此很可能尚未更新实现以允许这种行为。
[2] https://github.com/jsr107/jsr107spec/issues/340#issuecomment-254070714
[3] http://search.maven.org/#artifactdetails%7Cjavax.cache%7Ccache-api%7C1.1.0%7Cjar