使用匿名内部类的构造函数
建议39: 使用匿名类的构造函数
阅读如下代码,看看是否可以编译:
- public static void main(String[] args) {
- List l1 = new ArrayList();
- List l2 = new ArrayList(){};
- List l3 = new ArrayList(){{}};
- System.out.println(l1.getClass() == l2.getClass());
- System.out.println(l2.getClass() == l3.getClass());
- System.out.println(l1.getClass() == l3.getClass());
- }
注意ArrayList后面的不同点:l1变量后面什么都没有,l2后面有一对{},l3后面有2对嵌套的{},这段程序能不能编译呢?若能编译,那输出是多少呢?
答案是能编译,输出的是3个false。l1很容易解释,就是声明了ArrayList的实例对象,那l2和l3代表的是什么呢?
(1)l2=new ArrayList(){}
l2代表的是一个匿名类的声明和赋值,它定义了一个继承于ArrayList的匿名类,只是没有任何的覆写方法而已,其代码类似于:
- //定义一个继承ArrayList的内部类
- class Sub extends ArrayList{
- }
- //声明和赋值
- List l2 = new Sub();
(2) l3=new ArrayList(){{}}
这个语句就有点怪了,还带了两对大括号,我们分开来解释就会明白了,这也是一个匿名类的定义,它的代码类似于:
- //定义一个继承ArrayList的内部类
- class Sub extends ArrayList{
- {
- //初始化块
- }
- }
- //声明和赋值
- List l3 = new Sub();
- List l3 = new ArrayList(){{}{}{}{}{}};
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了