现有Jcache的密钥类型和值类型

时间:2017-12-15 10:22:59

标签: java jcache

有什么方法可以获得由其他代码创建的缓存的基础键和值类型定义?此时我只知道缓存名称。我没有关于如何创建缓存的任何其他信息。 缓存在这里是Jcache。

javax.cache.Cache cache = cachingService.getCache(cacheName);

这里它被转换为Object,Object。但我想知道实际的键类型和值类型。

1 个答案:

答案 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]),因此大多数可能的实现尚未更新以允许此行为。

[1] https://github.com/jsr107/jsr107spec/blob/v1.0.0/src/main/java/javax/cache/CacheManager.java#L200-L201

[2] https://github.com/jsr107/jsr107spec/issues/340#issuecomment-254070714

[3] http://search.maven.org/#artifactdetails%7Cjavax.cache%7Ccache-api%7C1.1.0%7Cjar