首页 > 解决方案 > 为什么这行得通?将参数传递给匿名接口实例化

问题描述

我已经研究 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() 时出现空指针异常。

提前感谢您的帮助。

标签: javainterfaceanonymous

解决方案


推荐阅读