(转载)http://my.oschina.net/qalong/blog/158527
偶尔发现了一段好玩的java代码,关于Java内部类的,觉得很有意思,但是想不明白这段代码是java语法的特性哪?还是别的什么。最后发现还是对java了解的不够深啊。先上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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(
"a"
);
add(
"45"
);
add(
"a"
);
add(
"asdfs"
);
}
};
for
(String str : lst) {
System.out.println(str);
}
}
}
|
最后多谢@brayden的解答,查看了JLS定义中的Instance Initializers,了解到这个是Java语法标准。顺便我反编译了一下,生成的代码,下面这段匿名方法最终会编译到这个内部类的构造函数中。
1
2
3
4
5
6
|
{
add(
"a"
);
add(
"45"
);
add(
"a"
);
add(
"asdfs"
);
}
|
其实看看反编译后的代码就都明白了:
Main.class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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);
}
}
|