偶尔发现了一段好玩的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");
}
反编译后的代码: Main
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<String>
{
Main$1()
{
add("a");
add("45");
add("a");
add("asdfs");
}
public boolean add(String paramString)
{
return super.add("LST-" + paramString);
}
}
就是做了一个继承ArrayList的匿名内部类. 一般有时候我们写: