有人可以帮我解释一下这段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("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);

  }

}


动漫人物
浏览 275回答 1
1回答

犯罪嫌疑人X

就是做了一个继承ArrayList的匿名内部类. 一般有时候我们写:new Thread(new Runnable() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void run() {&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }}).start();这个称为Instance Initializers, 在对象实例初始化的时候运行. 参见JLS7 8.6节. 你可以在任何类定义里这么写. 实际上这段代码 编译后会被加入初始化函数里.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java