为什么双括号初始化要求SerialVersionUID?

DKS*_*ore 2 java serialization

public static List<Long> abc = new ArrayList<Long>(){{ //Asks for SerialVersionUID
        abc.add(5L);
        abc.add(7L);
    }};

public static List<Long> abc = new ArrayList<Long>();//Does not need SerialVersionUID
    static{
        abc.add(5L);
        abc.add(7L);
    }
Run Code Online (Sandbox Code Playgroud)

ska*_*man 5

在第二个示例中,您将实例化已经定义serialVersionUID(即ArrayList)的类.

在第一个示例中,您要定义一个匿名子类ArrayList,并且您的子类需要有自己serialVersionUID定义的子类.双括号初始化实际上定义了一个匿名类并不总是显而易见的.