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

标签 java list arraylist

我正在尝试使用以下方式创建 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/

相关文章:

python - 如何找到与给定范围元组重叠的元组

C# 使用 Except 比较列表

java - 无法将缺失的时间字符串添加到列表中

java - 从 GWT 记录器中删除时间戳

java - 如何告诉 Spring 在不提供构造函数参数的情况下实例化选定的 bean?

java - 如何通过蓝牙一起读取所有字节?

java - 按字母顺序排序 ArrayList

java - EntityManagerFactory + jpadaosupport 的依赖注入(inject)问题

将列表转换为数组

java - ArrayList 在 for 循环中的行为不符合预期