Я пытаюсь создать экземпляр списка с помощью следующих способов:разница Тип между подобными декларациями ArrayList
List<String> listOne = new ArrayList<String>();
List<String> listTwo = new ArrayList<String>(){};
List<String> listThree = new ArrayList<String>() {{}};
только listOne
инициализируется как java.util.ArrayList
, но listTwo
и listThree
нет.
Что происходит при инициализации listTwo и listThree и как его лучше понять?
Мой тестовый пример выглядит следующим образом:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> listOne = new ArrayList<String>();
List<String> listTwo = new ArrayList<String>(){};
List<String> listThree = new ArrayList<String>() {{}};
System.out.printf("listOne.getClass() == listTwo.getClass() is %b \n",
listOne.getClass() == listTwo.getClass());
System.out.printf("listOne.getClass() == listThree.getClass() is %b \n",
listOne.getClass() == listThree.getClass());
System.out.printf("listThree.getClass() == listTwo.getClass() is %b \n",
listThree.getClass() == listTwo.getClass());
System.out.printf("listOne.getClass() is %s \n",listOne.getClass());
System.out.printf("listTwo.getClass() is %s \n",listTwo.getClass());
System.out.printf("listThree.getClass() is %s \n",listThree.getClass());
}
}
Его вывод в консоли выглядит следующим образом:
listOne.getClass() == listTwo.getClass() is false
listOne.getClass() == listThree.getClass() is false
listThree.getClass() == listTwo.getClass() is false
listOne.getClass() is class java.util.ArrayList
listTwo.getClass() is class Test$1
listThree.getClass() is class Test$2
попытаться прочитать этот пост, и вы найдете ответ: [1]: HTTP: // stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization –