有什么方法可以获得由其他代码创建的缓存的基础键和值类型定义?此时我只知道缓存名称。我没有关于如何创建缓存的任何其他信息。 缓存在这里是Jcache。
javax.cache.Cache cache = cachingService.getCache(cacheName);
这里它被转换为Object,Object。但我想知道实际的键类型和值类型。
答案 0 :(得分:0)
一旦有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();
现在,为了在使用JCache 1.0时获取Cache
本身,如果您不知道其配置的键/值类型选项,则唯一的选择是使用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