当我使用kryo反序列化ArrayList对象时,我得到一个NullPointerException.
Caused by: java.lang.NullPointerException at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:215) at java.util.ArrayList.ensureCapacity(ArrayList.java:199) at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:96) at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:22) at com.esotericsoftware.kryo.Kryo.readobject(Kryo.java:679) at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
我可以看到StdInstantiatorStrategy在不调用其构造函数的情况下创建了一个ArrayList,而其中一个字段未初始化导致异常.
文档说首先应该调用无参数构造函数,如果没有可用的话,应该使用StdInstantiatorStrategy来进行字段初始化.
我究竟做错了什么?
解决方法
随着kryo版本2.24,呼叫
kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());
覆盖使用class no argument构造函数的默认实例化器策略(如果存在).正确的方法是打电话:
((Kryo.DefaultInstantiatorStrategy) kryo.getInstantiatorStrategy()).setFallbackInstantiatorStrategy(new StdInstantiatorStrategy());
这在这里解释https://github.com/EsotericSoftware/kryo
我认为自2.21版以来这已经发生了变化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。