我使用Hazelcast将一些数据存储在IMap中,但目前我正面临一个"问题"在POJO中使用null属性存储在缓存中。
想象一下,我有以下pojo:
public class TestPojo implements Portable {
public static final int CLASS_ID = 1;
private Long id;
private String description;
private Long value;
@Override
public int getFactoryId() {
return 1;
}
@Override
public int getClassId() {
return CLASS_ID;
}
@Override
public void writePortable(PortableWriter writer) throws IOException {
writer.writeLong("id", id);
writer.writeUTF("description", description);
writer.writeLong("value", value);
}
@Override
public void readPortable(PortableReader reader) throws IOException {
id = reader.readLong("id");
description = reader.readUTF("description");
value = reader.readLong("value");
}
}
问题在于序列化此类包含属性'值' = null它将抛出NullPointerException,因为writeLong方法使用原始long。
[3.3-EA2]加载所有任务时出现异常:com.hazelcast.nio.serialization.HazelcastSerializationException:java.lang.NullPointerException
我的问题是:应该以正确的方式处理这个空值?
我正在使用Hazelcast 3.3-EA2。
谢谢。
答案 0 :(得分:1)
为什么要使用便携式设备? (已识别)DataSerializable不那么痛苦。 Portable不处理空值,因此它意味着您需要转换为字符串,然后例如插入'null'表示null或'1234'表示处理null的数字。通过阅读你读出字符串,如果它包含'null',那么你设置为null,否则你就是做Long.parseLong。
因此,除非你有充分的理由,否则我会远离它。
答案 1 :(得分:0)
只需检查if (value != null)
,然后再致电writer.writeLong(value)
。