【发布时间】:2009-07-08 19:36:50
【问题描述】:
很遗憾,我已经有五年没有编写 Java 代码了,我完全不记得下面的代码是如何工作或为什么工作的。
我偶然发现了一个类似的例子并将其分解为这个。重点是注释下方的部分:我没有得到构造函数符号,后跟双括号中的块。不幸的是,我在 Java 文档中或使用 Google 找不到任何内容(我应该用什么词来搜索?)。
package syntaxtest;
public class Main {
public static void main(String[] args) {
// What kind of notation is this?
MyTest tester = new MyTest() {{
setName("John Johnson");
}};
System.out.println(tester.getName());
}
}
class MyTest {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
所以这是我的问题:
- 如何调用此表示法/语法?
- 在哪里可以阅读有关它的一些文档?
如果有人可以为我提供第一个问题的答案,我想/希望我能够自己回答第二个问题。
说清楚:我知道输出是John Johnson ;) 但我不知道它为什么起作用。
【问题讨论】:
-
当我第一次在 Usenet 上看到它时,我不得不看了一会儿才意识到发生了什么。一旦你知道它是什么,就很明显了。
-
我不久前在 SO 上看到了这个巧妙的技巧,但我也看到了很多免责声明,说用它很容易破坏东西/不是很可靠。如果我要尝试使用它,我一定会考虑 A)我必须向每个人解释它以从那时起查看代码,并且 B)我必须做一些研究以了解使用此模式的所有含义。
-
感谢大家快速而有帮助的回复!
标签: java syntax constructor anonymous-class