工作笔记(九)
2019-10-19 本文已影响0人
overflow_e4e4
学习到了新的写法:
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(3);
}
};
这种写法初看很特殊,类似于new ArrayList<Integer>(){.....}
,其实是内部匿名类的写法,但是缺少了方法名,想了想才明白其实中间部分恰好是一个构造函数。但还是有疑问,因为ArrayList可不止一个构造函数。
为此我做了一些实验:
因为考虑ArrayList是有多个构造函数的,我这样写也是可以的:
List<Integer> list = new ArrayList<Integer>(1) {
{
add(1);
add(2);
add(3);
}
};
这是用的带参的构造函数,所以中间那部分不是调用的无参数构造函数,而是因为匿名类的特殊性根据,new XXX(...){{...}}
,在()
中决定使用哪个构造函数,而第二个{}中的内容会作为代码段加到那个构造函数中。
这个匿名内部类编译后大概是这样:
我个人认为这种写法非常好,因为有的集合就是需要初始化一些信息,这种不需要我们再新写一个类去做这些事情,即插即用。