InvalidClassException
异样通过
类A在零碎应用ehcache作为缓存,当初A类中新增的一个字段aa
;
新增后启动我的项目后报错:java.io.InvalidClassException: xxx.xxx.xxx; local class incompatible: stream classdesc serialVersionUID = xxx, local class serialVersionUID = xxx;
,报错的大略意思是缓存中serialVersionUID的与本地类不兼容;
通过查看发现A类实现了Serializable
却没有定义出serialVersionUID
,导致缓存在验证serialVersionUID
时前后不统一抛出异样;
这里须要解释一下:类没有显式申明serialVersionUID
字段,则Java运行时零碎将依据类的各种详细信息主动生成一个serialVersionUID
。
解决办法
既然原来会生成一个serialVersionUID
,那么咱们获取到原来的serialVersionUID
再给类设置下来,就保障统一了。
通过报错信息外面就能够获取原来的serialVersionUID
;
或者通过上面的代码获取
ObjectStreamClass sc = ObjectStreamClass.lookup(A.class);long ASerialVersionUIDserialID = sc.getSerialVersionUID();System.out.println("A: " + ASerialVersionUIDserialID);//这里就是获取到的serialVersionUID
留神:这里A类必须时批改之前的模样,能够通过git、svn等工具获取;
还有就是实现了Serializable
肯定要加上serialVersionUID
,没事不要乱动serialVersionUID
private static final long serialVersionUID = XXXL;