java 匿名初始化_关于java匿名内部类初始化法

最近无意间发现一种对象的初始化方法:匿名内部类初始化法

List list = new ArrayList(){{

add("爱飘de小子");

add("flyingkid");

}};

Map map = new HashMap(){{

put("name","爱飘de小子");

put("age",24);

}};

还有这种操作!!! 我尽然不知道有这种优雅的初始化法。于是研究如下:

这种方式采用匿名内部类初始化对象,List list = new ArrayList(){{ ... }} , 其中 new ArrayList(){{ ... }} , 再堆内存中创建的对象并不是ArrayList对象, 而是继承于ArrayList对象的匿名内部类。

第一层花括号含义: 定义匿名内部类,继承于ArrayList。

List list = new ArrayList(){

//此时以完成匿名内部类的定义,并未初始化内部类实例,可以重写父类ArrayList的方法

@Override

public boolean add(String s) {

return super.add(s);

}

//匿名内部类自定义方法, 仅供内部使用,毫无意义

public boolean selfAdd(String s) {

return super.add(s);

}

};

第二层花括号含义: 匿名内部类实例初始化。

List list = new ArrayList(){

{

//实例已完成初始化,可以直接调用父类的方法,也可以调用内部类自定义方法

super.add("爱飘de小子");

selfAdd("flyingkid");

}

//匿名内部类自定义方法, 仅供内部使用,毫无意义

public boolean selfAdd(String s) {

return super.add(s);

}

};

需要注意的是继承与ArrayList必须制定类型,否则编译器变异不通过。

aebacb57dd74?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

aebacb57dd74?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

引发的问题:

List list = new ArrayList(){{ ... }} , 其中list并不是ArrayList的引用,而是ArrayList子类的引用。子类和 ArrayList的功能一样。而且子类的数据不是通过引用去赋值,而是通过自身的初始化。写法简介,虚拟机编译后并不简洁

2.还可能造成内存泄露,序列化时可能会出现一些问题(网上说的)

结论:

虽然在阿里巴巴java开发手册中并没有提到匿名内部类初始化法,但是在开发过程过能不用,尽量不要用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

感谢生活的磨砺

感谢伤害你的人,因为他磨炼了你的心志!  感谢绊倒你的人,因为他强化了你的双腿!  感谢欺骗你的人,因为他增进了你的智慧!  感谢藐视你的人,因为他觉醒了你的自尊!  感谢遗弃…

MemoryCache 使用不当导致的一个 BUG

MemoryCache 使用不当导致的一个 BUGIntro前几天发现代码里的一个 BUG,原因是 MemoryCache 使用不当,可以对于很多人来说可能都知道,但还是想分享记录一下,避免以后写出同样的 BUGSample直接来看下面的示例吧await using var serv…

Llinux 磁盘配额的搭建和常规问题解答

1 磁盘配额的使用限制仅针对整个分区:磁盘配额实际运行时,是针对“整个分区”进行限制的,例如,如果/dev/hda5载入在/home下,那么,在/home下面的所有目 录都会受到限制。只对一般身份用户有效:并…

22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕

转自:大数据文摘编译:牛婉杨2017年,一位名叫Marcus Hutchins的少年从有史以来最严重的网络攻击事件“WannaCry 勒索病毒”中拯救了互联网。如果你是个geek,那么你对WannaCry这个名字一定不陌生, 这是一种可以自行传播的…

python安装beautifulsoup失败_Win10环境下python36安装BeautifulSoup出现错误的解决办法

说明:win10 64位系统,Python3.6.3Win10环境下安装BeautifulSoup4貌似没有任何问题,但是当使用时就会报错,错误如下:通过报错信息到相应的位置去查看文件try:is_file os.path.exists(possible_filename)except Excepti…

使用 Git Extensions 简单入门 Git

使用 Git Extensions 简单入门 Git—— 独立观察员 2015.11.25前言关于这个主题,之前我录了段视频教程,在本地看清晰度还可以,但传到优酷上就很不清晰了,即使是后来重制后还是一样不清晰,所以现在想整理成文字版。当然…

各省地图都像些什么?

全世界只有3.14 % 的人关注了爆炸吧知识人们常说中国地图的形状像一只雄鸡,但具体到每一个省区则并没有一个明确的说法。看看下面这一套省区地图对应的有趣的想象,你觉得像还是不像?★安徽有人说安徽像一只斜倒挂着的蝙蝠,你能看出…

android 蓝牙各种UUID(转载)

android 蓝牙各种UUID ServiceDiscoveryServerServiceClassID_UUID {00001000-0000-1000-8000-00805F9B34FB} BrowseGroupDescriptorServiceClassID_UUID {00001001-0000-1000-8000-00805F9B34FB} PublicBrowseGroupServiceClass_UUID {00001002-0000-1000-8000-00805F9B34F…

Silverlight中摄像头的运用—part2

Silverlight 4 中摄像头的运用—part1将跟踪颜色视作输入 好了,我们能够跟踪到这个颜色了,那这么做的意义是什么呢?实际上,我们可以根据它的位置来移动东西。接下来的例子中,创建的一个球会跟随这个颜色一起移动。你可…

python静态变量和静态方法_python的静态成员变量、实例成员变量、静态方法、类方法、实例方法...

标签:静态成员变量(类变量)和普通成员变量(实例变量)静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得。在实例对静态成员变量赋值时,实例python是动态类型的语言,没有特别的标志区分静态…

同学,解决下这个 Bug!

一些解决 Bug 的小技巧大家好,我是鱼皮。学编程的过程中,我们会遇到各式各样的 Bug,也常常因为它们而感到头秃。但随着你不断解决 Bug、积累经验,就会发现其实解决 Bug 也是有套路的。今天分享下鱼皮自己总结的解决 Bug 套路&…

C#编写串口通信程序(转)

一.概述 在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通 过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在Micr…

pfsense下的流量管理(转)

http://www.pppei.net/blog/post/331 在作流量管理时,这些概念很重要,不要迷失。。 这里再对Limiter 的源地址和目的地址做个说明,因为limiter是被应用在Lan接口的Rule里,相对pfsense来说,用户发往 Lan口的流量为In&am…

如果给你一个亿,你想去干嘛?各专业的科研狗是这样回答的……

全世界只有3.14 % 的人关注了爆炸吧知识“如果现在给你一个亿,你想去做什么?”每天都被穷醒的小天一看到,立马展开了丰富的想象力:首先,当然少不了买买买,将一切之前想要的、不想要的,贵的、更贵…

Apache并发处理模块

apache 2.x版本目前有好几种并发处理模块, 需要在编译的时候通过–with-mpmxxx指定,常用的并发处理模式是prefork和worker。prefork这种模式比较古老,纯进程并发,没有线程,处理方式跟apache1.x是一样的,适用于那些没有…

头文件定义全局变量_5.2 C++局部变量与全局变量 | 输出局部全局变量

C局部变量C局部变量是指:在一个函数内部定义的变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它,在此函数以外是不能使用这些变量的。同样,在复合语句中定义的变量只在本复合语句范围内有效,…

java float转换成long_在Java中如何将float转换为long或int数据类型?

float f1.2f;double dDouble.parseDouble(String.valueOf(f));System.out.println(d);直接转换会设计到精度问题,所以需要借助字符串 保证不丢失数据www.shufadashi.com防采集。楼主您好,如果float是个整数,强制转换即可,可以捕捉…

Spark 1.2 发布,开源集群计算系统

2019独角兽企业重金招聘Python工程师标准>>> Spark 1.2 发布,此版本包括 172 位贡献者和超过 1000 个 commits。 此版本包括 Spark 核心操作和性能改进;添加新的网络传输子系统,进行了较大的改进;Spark SQL 引入了一个…

[转载].SSRAM、SDRAM和Flash简要介绍

转CalmBright兄的博文:http://www.cnblogs.com/CalmBright/archive/2009/07/19/1526569.html Abstract 在用NIos II 调试sdram遇到了其容量计算的问题,现介绍如下 Introduction 问题1:什么是DRAM、SRAM、SDRAM? 答:名词…