Java中的內部類實例初始化匿名函數(JLS7 8.6:Instance Initializers)

偶爾發現了一段好玩的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);
  }
}
相關文章
相關標籤/搜索