1. 程式人生 > >使用匿名內部類初始化集合類

使用匿名內部類初始化集合類

List<String> list = new ArrayList<String>(){
            {
                add("a");
            }
        };

這種寫法,是使用匿名內部類,繼承自ArrayList,同時菱形運算子裡的String不能省略,否則Eclipse會提示錯誤'<>' cannot be used with anonymous classes。因為這裡省略String,編譯器無法推測正確的型別。裡層的大括號包裹的程式碼是例項初始化塊。
這種寫法編譯器會警告The serializable class does not declare a static final serialVersionUID field of type long

,跟serialVersionUID這個東西有關。就是說這種寫法在序列化上會出現一些問題。

private static final List<String> list = new ArrayList<String>() {
    {
        add("a");
    }
};

不符合sonar java規範
sonar Java規範中上述寫法為Noncompliant - ArrayList should be extended only to add behavior, not for initialization.
靜態物件,用標準的靜態塊初始化,應該如下寫:

private static final List<String> list = new ArrayList<>();
static {
    list.add("a");
}