首页 > 开发 > JAVA > 正文

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

2017-09-07 09:24:28  来源:网友分享

偶尔发现了一段好玩的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);  }}

解决方案

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

new Thread(new Runnable() {    @Override    public void run() {        ...    }}).start();