有人可以帮我解释一下这段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);
  }
}
阅读 4.2k
1 个回答

就是做了一个继承ArrayList的匿名内部类. 一般有时候我们写:

new Thread(new Runnable() {
    @Override
    public void run() {
        ...
    }
}).start();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
101 新手上路
子站问答
访问
宣传栏