什么';这段java代码有什么问题 private静态最终列表数据=新列表(){{ 添加(“aaaa”); 添加(“bbbb”); 系统输出打印项次(数据); }};

什么';这段java代码有什么问题 private静态最终列表数据=新列表(){{ 添加(“aaaa”); 添加(“bbbb”); 系统输出打印项次(数据); }};,java,Java,我已经声明了一个列表并添加了一些数据。然后我想打印存储在该列表中的数据。但代码不起作用。您能解释一下原因吗?您需要实现java.util.List接口的方法。并且您的代码不在方法或静态块中 我认为这更容易 private static final List<String> datas = new List<String>() {{ add("aaaa"); add("bbbb"); System.out.println(datas); }}; /

我已经声明了一个列表并添加了一些数据。然后我想打印存储在该列表中的数据。但代码不起作用。您能解释一下原因吗?

您需要实现java.util.List接口的方法。并且您的代码不在方法或静态块中

我认为这更容易

private static final List<String> datas = new List<String>() {{
    add("aaaa");
    add("bbbb");
    System.out.println(datas);
}};
//创建空数组列表
ArrayList=新建ArrayList();
//向arrayList添加项
列表。添加(“第1项”);
列表。添加(“第2项”);

您在这里使用的是双大括号初始化。基本上,这将创建一个匿名类,该类带有一个初始值设定项,该初始值设定项执行一些处理,例如向列表中添加数据

使用添加的换行符编写,这就是它的真实外观:

    // Creating an empty array list
    ArrayList<String> list = new ArrayList<String>();
    // Adding items to arrayList
    list.add("Item1");
    list.add("Item2");
private静态最终列表数据=新列表(){
{
//这是初始化程序块
添加(“aaaa”);
添加(“bbbb”);
系统输出打印项次(数据);
}
//哈?这里没有实现列表的方法!
};
第一个问题是,您试图创建一个名为
List
的匿名类,但没有覆盖它的任何抽象方法。这将导致编译错误

第二个“问题”是,
System.out.println
类位于初始值设定项内部,但此时变量
datas
null
,因此将打印它(这可能不是您想要的)


因此,首先,您需要创建一个从
ArrayList
派生的匿名类,或者其他一些列表实现,这样您就不必重写任何方法。其次,您不希望在初始值设定项内部打印变量的内容,而是在初始值设定项外部打印。第三,可能也是最重要的一点:您根本不想使用双大括号初始化

您的代码将列表接口实现为匿名类,因此必须实现所有列表方法。我认为您考虑过静态列表初始化,应该这样做:

private static final List<String> datas = new List<String>() {

    {
        // this is the initializer block
        add("aaaa");
        add("bbbb");
        System.out.println(datas);
    }

    // huh? no methods of List are implemented here!

};
private static final List data=new ArrayList();
静止的{
添加数据(“aaaa”);
添加数据(“bbbb”);
系统输出打印项次(数据);
};

您可能无法在声明中执行
System.out.println
——但可以在静态初始化块中执行。(但双大括号初始化方法是一种肮脏的黑客行为,无论如何你最好避免它。)它不编译。如果您让它编译,它将打印
null
。为什么你想知道这种不工作的方式是如何不起作用的?您可能想编写
静态{}
。您不能在静态块中打印这不是这里发生的事情,但您为什么这么认为?
private static final List<String> datas = new ArrayList<String>(); 
static{
    datas.add("aaaa");
    datas.add("bbbb");
    System.out.println(datas);
};