偶尔发现了一段好玩的java代码,关于Java内部类的,觉得很有意思,但是想不明白这段代码是java语法的特性哪?还是别的什么。哪位能给我解释一下哪~~import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List<String> lst = new ArrayList<String>() { @Override public boolean add(String paramE) { return super.add("LST-" + paramE); } { add("RMB"); add("USD"); add("AUS"); } }; for (String str : lst) { System.out.println(str); } }}多谢@brayden的解答,查看了JL定义中的Instance Initializers,了解到这个是Java语法标准。顺便我反编译了一下,生成的代码,下面这段匿名方法最终会编译到这个内部类的构造函数中。{ add("RMB"); add("USD"); add("AUS");}反编译后的代码: Mainimport 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<String>{ Main$1() { add("a"); add("45"); add("a"); add("asdfs"); } public boolean add(String paramString) { return super.add("LST-" + paramString); }}
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
就是做了一个继承ArrayList的匿名内部类. 一般有时候我们写:
new Thread(new Runnable() {
@Override
public void run() {
...
}
}).start();
这个称为Instance Initializers, 在对象实例初始化的时候运行. 参见JLS7 8.6节. 你可以在任何类定义里这么写. 实际上这段代码 编译后会被加入初始化函数里.
添加回答
举报
0/150
提交
取消