是否可以知道是否自动生成了serialVersionUID?

时间:2011-08-24 12:17:20

标签: java serialization

我想知道是否有可能弄清楚是否已经自动生成了一些serialVersionUID(由JVM),或者是否在类中明确定义了静态的。

是否可以做任何线索,如果可以的话?

2 个答案:

答案 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是否会以这种方式分配它,或者只是在生成它时以不同的方式存储它。

此致  斯特凡