工作笔记(九)

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(...){{...}},在()中决定使用哪个构造函数,而第二个{}中的内容会作为代码段加到那个构造函数中。
这个匿名内部类编译后大概是这样:

匿名内部类编译后

我个人认为这种写法非常好,因为有的集合就是需要初始化一些信息,这种不需要我们再新写一个类去做这些事情,即插即用。

上一篇下一篇

猜你喜欢

热点阅读