可以将接口用作Coherence Cache中的密钥吗?

时间:2017-09-20 15:54:09

标签: caching oracle-coherence

我有两种不同类型的键:

interface Key extends Serializable {
   String getName();
}

class KeyA implements Key {
    private String name;
    private int fieldA;
}

class KeyB implements Key {
    private String name;
    private int fieldB;
}

我可以将Key界面用作 Coherence 分区缓存中的密钥吗?

2 个答案:

答案 0 :(得分:1)

实现该接口的类的实例可以在这里用作键。

答案 1 :(得分:1)

是的,但您必须确保Key的所有可能实施都符合以下先决条件(来自Oracle Documentation):

  

缓存键还必须提供hashCode()和的实现   equals()方法,这些方法必须返回一致的结果   跨群集节点。这意味着执行   hashCode()equals()必须完全基于对象   可序列化状态(即对象的非瞬态字段)。

     

...

     

某些缓存实施(特别是分区缓存)使用   用于等式测试的关键对象的序列化形式,其中   表示equals()方法返回true的键必须   序列化相同

Patrick Peralta有一个很好的article解释了这种行为。