gpt4 book ai didi

java - 类似 ArrayList 声明之间的类型差异

转载 作者:行者123 更新时间:2023-12-04 20:49:02 26 4
gpt4 key购买 nike

我正在尝试使用以下方式创建 List 实例:

List<String> listOne = new ArrayList<String>();

List<String> listTwo = new ArrayList<String>(){};

List<String> listThree = new ArrayList<String>() {{}};

只有listOne被初始化为java.util.ArrayListlistTwolistThree没有。

初始化 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

最佳答案

在此创建 ArrayList 类的新实例

List<String> listOne = new ArrayList<String>();

在这里你定义了一个从 ArrayList 扩展的匿名类并创建它的新实例

List<String> listTwo = new ArrayList<String>(){};

这里你定义了另一个匿名类,它扩展自 ArrayList 并在初始化 block 中声明并创建它的一个实例

List<String> listThree = new ArrayList<String>() {{}};

关于java - 类似 ArrayList 声明之间的类型差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126047/

26 4 0