有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有没有可能做到的线索,如果有,怎么做


共 (2) 个答案

  1. # 1 楼答案

    您是否尝试通过自省来检查字段serialUID? 我不知道JVM是以这种方式分配它,还是在生成它时以不同的方式存储它

    问候, 圣菲

  2. # 2 楼答案

    使用反射。下面是一个例子(不过我还没有检查SerialVersionId字段的确切约定):

    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;
        }
    }