我想知道是否有可能弄清楚是否已经自动生成了一些serialVersionUID(由JVM),或者是否在类中明确定义了静态的。
是否可以做任何线索,如果可以的话?
答案 0 :(得分:2)
使用reflection.Here是一个例子(我还没有检查serialVersionUID字段的确切合约):
public class SerialTest {
private static class A implements Serializable {
private static final long serialVersionUID = 1L;
}
private static class B implements Serializable {
}
public static void main(String[] args) throws Exception {
System.out.println("A : " + containSerialVersionUID(A.class));
System.out.println("B : " + containSerialVersionUID(B.class));
}
private static boolean containSerialVersionUID(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equals("serialVersionUID")
&& field.getType() == Long.TYPE
&& Modifier.isPrivate(field.getModifiers())
&& Modifier.isStatic(field.getModifiers())
&& Modifier.isFinal(field.getModifiers())) {
return true;
}
}
return false;
}
}
答案 1 :(得分:0)
您是否尝试通过内省来检查字段serialUID? 我不知道JVM是否会以这种方式分配它,或者只是在生成它时以不同的方式存储它。
此致 斯特凡