java - 为什么这行得通?将参数传递给匿名接口实例化
问题描述
我已经研究 Java 几个月了,但我很难理解以下示例:
public class UnderstandAnonymousInterfaceInstance {
private interface Printable {
public void print();
}
private Printable printer;
private UnderstandAnonymousInterfaceInstance(Object o) {
this.printer = new Printable() {
@Override
public void print() {
System.out.println("" + o.toString());
}
};
}
void print() {
this.printer.print();
}
public static void main(String[] args) {
new UnderstandAnonymousInterfaceInstance(new Object() {
@Override
public String toString() {
return "My Teststring";
}
}).print();
}
}
输出是
My Teststring
但为什么?对象的句柄存储在哪里?该接口当然没有任何成员,本示例中的其他任何人也没有。Object 的句柄被传递给构造函数并传递给接口的匿名实例。据我了解,它应该在之后不复存在,并且我期待在调用 print() 时出现空指针异常。
提前感谢您的帮助。
解决方案
推荐阅读
- apollo-client - 如何使用 apollo-angular-graphql 上传文件?
- r - 更改特定组的 summarize() 计算
- python - 不应该发生的 Python 错误
- awk - 带有可变输入的 AWK 输出字符串
- javascript - 为什么 css url() 函数会破坏我的路径?
- c# - C# Singleton in a using 语句 - 在 using 语句结束时 Singleton 会发生什么
- reactjs - 开玩笑/酶测试事件侦听器已删除
- npm - Angular 5 CLI 中的引导程序 4 css 文件
- java - 从 JSON 响应中获取所有记录
- java - 将 jar 工件部署到 Nexus 会导致内容类型不匹配