0

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

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

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

4

1 回答 1

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();

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]),因此很可能尚未更新实现以允许这种行为。

[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

于 2017-12-18T13:19:11.543 回答