jvm - 有人可以帮我解释一下这段java内部类的代码吗
ringa_lee
ringa_lee 2017-04-17 11:10:21
[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);
  }
}
ringa_lee
ringa_lee

ringa_lee

全部回复(1)
ringa_lee

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

new Thread(new Runnable() {
    @Override
    public void run() {
        ...
    }
}).start();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号