jvm - 有人可以帮我解释一下这段java内部类的代码吗
ringa_lee
ringa_lee 2017-04-17 11:10:21
0
1
378

偶尔发现了一段好玩的java代码,关于Java内部类的,觉得很有意思,但是想不明白这段代码是java语法的特性哪?还是别的什么。哪位能给我解释一下哪~~

import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List lst = new ArrayList() { @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 { 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)
左手右手慢动作

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

new Thread(new Runnable() { @Override public void run() { ... } }).start();
いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!