博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的内部类实例初始化匿名函数(JLS7 8.6:Instance Initializers)
阅读量:6041 次
发布时间:2019-06-20

本文共 1334 字,大约阅读时间需要 4 分钟。

  hot3.png

偶尔发现了一段好玩的java代码,关于Java内部类的,觉得很有意思,但是想不明白这段代码是java语法的特性哪?还是别的什么。最后发现还是对java了解的不够深啊。先上代码:

import java.util.ArrayList;import java.util.List;public class Main {	public static void main(String[] args) {		List
lst = new ArrayList
() { @Override public boolean add(String paramE) { return super.add("LST-" + paramE); } { add("a"); add("45"); add("a"); add("asdfs"); } }; for (String str : lst) { System.out.println(str); } }}

最后多谢@brayden的解答,查看了JLS定义中的Instance Initializers,了解到这个是Java语法标准。顺便我反编译了一下,生成的代码,下面这段匿名方法最终会编译到这个内部类的构造函数中。

{    add("a");    add("45");    add("a");    add("asdfs");}

其实看看反编译后的代码就都明白了:

Main.class

import java.io.PrintStream;import java.util.ArrayList;public class Main{  public static void main(String[] paramArrayOfString)  {    ArrayList local1 = new ArrayList()    {      public boolean add(String paramAnonymousString) {        return super.add("LST-" + paramAnonymousString);      }    };    for (String str : local1)      System.out.println(str);  }}
Main$1内部类
import java.util.ArrayList;final class Main$1 extends ArrayList
{ Main$1() { add("a"); add("45"); add("a"); add("asdfs"); } public boolean add(String paramString) { return super.add("LST-" + paramString); }}

转载于:https://my.oschina.net/qalong/blog/158527

你可能感兴趣的文章
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
编译安装nginx 1.9.15
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
linux
查看>>
C#+QQEmail自动发送邮件
查看>>
[Hadoop]MapReduce多输出
查看>>
Android Activity详解(一)
查看>>