偶爾發現了一段好玩的java代碼,關於Java內部類的,以爲頗有意思,可是想不明白這段代碼是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("a"); add("45"); add("a"); add("asdfs"); } }; for (String str : lst) { System.out.println(str); } } }
最後多謝@brayden的解答,查看了JLS定義中的Instance Initializers,瞭解到這個是Java語法標準。順便我反編譯了一下,生成的代碼,下面這段匿名方法最終會編譯到這個內部類的構造函數中。 ide
{ add("a"); add("45"); add("a"); add("asdfs"); }
其實看看反編譯後的代碼就都明白了: 函數
Main.class code
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); } }