Java 传入与方法签名不匹配的值

Java 传入与方法签名不匹配的值,java,ignite,type-parameter,Java,Ignite,Type Parameter,我使用的是ApacheIgnite,它不是问题的核心,但提供了背景信息。在这种情况下,我创建了一个扩展CacheStoreAdapter的类,该类有一个具有以下签名的方法: @Override public void write(Entry<? extends K, ? extends V> cacheEntry) throws CacheWriterException { 。。。产出如下: 也就是说,cacheObject取自java中的条目,类型参数是可选的:它们不随对象实例一

我使用的是ApacheIgnite,它不是问题的核心,但提供了背景信息。在这种情况下,我创建了一个扩展
CacheStoreAdapter
的类,该类有一个具有以下签名的方法:

@Override
public void write(Entry<? extends K, ? extends V> cacheEntry) throws CacheWriterException {
。。。产出如下:


也就是说,
cacheObject
取自java中的
条目,类型参数是可选的:它们不随对象实例一起携带,只存在于语言级别

因此,您可以始终将任何内容强制转换到,然后调用任何类型检查已删除的方法:

Map<String, Integer> sim = new HashMap<>();
Map<Object, Object> oom = (Map<Object, Object>) (Map) sim;
Map sim=new HashMap();
地图oom=(地图)(地图)sim卡;

至于BinaryObjectImpl,Ignite将尽可能使对象保持序列化状态,以节省序列化成本。因此,您应该知道CacheStore的类型参数并不总是面向用户的类型。

您的
write
实现的调用方可能会创建
Map.Entry
的实例。例如:

Entry entry = new Entry() { /* ... */ }
...
cache.write(entry);
Map<String, Integer> sim = new HashMap<>();
Map<Object, Object> oom = (Map<Object, Object>) (Map) sim;
Entry entry = new Entry() { /* ... */ }
...
cache.write(entry);