为了账号安全,请及时绑定邮箱和手机立即绑定

有人可以帮我解释一下这段java内部类的代码吗

有人可以帮我解释一下这段java内部类的代码吗

动漫人物 2019-03-19 17:14:25
偶尔发现了一段好玩的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");}反编译后的代码: Mainimport 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);  }}
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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


new Thread(new Runnable() {

    @Override

    public void run() {

        ...

    }

}).start();

这个称为Instance Initializers, 在对象实例初始化的时候运行. 参见JLS7 8.6节. 你可以在任何类定义里这么写. 实际上这段代码 编译后会被加入初始化函数里.

查看完整回答
反对 回复 2019-04-15
  • 1 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信