Java HazelCastInstanceWare不适用于嵌套对象
嗯。。在某些情况下,我有一个对象需要在hazelcast实例上执行操作。所以我实现了HazelcastInstanceAware接口,但这似乎不适用于嵌套类 以下内核向控制台输出“null”: 公共类NullError实现可序列化的HazelCastInstanceWare{ 私有瞬态HazelcastInstance实例1; 私有瞬态HazelcastInstance实例2Java HazelCastInstanceWare不适用于嵌套对象,java,hazelcast,Java,Hazelcast,嗯。。在某些情况下,我有一个对象需要在hazelcast实例上执行操作。所以我实现了HazelcastInstanceAware接口,但这似乎不适用于嵌套类 以下内核向控制台输出“null”: 公共类NullError实现可序列化的HazelCastInstanceWare{ 私有瞬态HazelcastInstance实例1; 私有瞬态HazelcastInstance实例2 public static void main(String[] args) throws Exception {
public static void main(String[] args) throws Exception {
//new NullError().test();
new NullError().lala();
}
private void lala() throws Exception {
instance1 = Hazelcast.newHazelcastInstance();
instance2 = Hazelcast.newHazelcastInstance();
IMap<Object, Object> foo = instance1.getMap("foo");
foo.put("foo", new Foo(instance1));
((Callable) instance2.getMap("foo").get("foo")).call();
}
public static class Foo implements Serializable, Callable {
public Bar bar;
public Foo(HazelcastInstance instance) {
bar = new Bar(instance);
}
@Override
public Object call() throws Exception {
return bar.call();
}
}
public static class Bar implements Callable, Serializable, HazelcastInstanceAware {
private transient HazelcastInstance i;
public Bar(HazelcastInstance instance) {
this.i = instance;
}
@Override
public void setHazelcastInstance(HazelcastInstance instance) {
this.i = instance;
}
@Override
public Object call() throws Exception {
System.out.println(i);
return null;
}
}
publicstaticvoidmain(字符串[]args)引发异常{
//新建NullError().test();
新的NullError().lala();
}
私有void lala()引发异常{
instance1=Hazelcast.newHazelcastInstance();
instance2=Hazelcast.newHazelcastInstance();
IMap foo=instance1.getMap(“foo”);
foo.put(“foo”,新foo(实例1));
((可调用)instance2.getMap(“foo”).get(“foo”)).call();
}
公共静态类Foo实现可序列化、可调用{
公共酒吧;
公共Foo(HazelcastInstance){
bar=新的bar(实例);
}
@凌驾
公共对象调用()引发异常{
返回条.call();
}
}
公共静态类栏实现可调用、可序列化、HazelCastInstanceWare{
私人暂住哈泽尔卡斯特一号;
公共酒吧(HazelcastInstance){
this.i=实例;
}
@凌驾
公共无效setHazelcastInstance(HazelcastInstance实例){
this.i=实例;
}
@凌驾
公共对象调用()引发异常{
系统输出打印LN(i);
返回null;
}
}
}
本文档未提及HazelCastInstanceWare仅适用于根对象。。有什么想法吗?这是一个Bug吗?HazelCastInstanceWare只在要反序列化的根对象上工作。我们不研究实现此接口的实例的对象图。啊,好的,我明白了。我现在使用的解决方法是在保存当前实例的类中使用静态变量(如果为null,则创建一个新实例)