使用匿名內部類初始化集合類
阿新 • • 發佈:2018-12-26
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
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");
}