我可以使用某些语法访问匿名内部类中的新方法吗?

2024-04-01

是否有任何 Java 语法可以从外部类访问匿名内部类中定义的新方法?我知道可以有多种解决方法,但我想知道是否存在特殊语法?

例如

class Outer {

    ActionListener listener = new ActionListener() {

        @Override
        void actionPerformed(ActionEvent e) { 
             // do something
        }

        // method is public so can be accessible
        public void MyGloriousMethod() {
             // viva!
        }

    };

    public void Caller() {
         listener.MyGloriousMethod(); // does not work!
    }


}

我自己的解决方案

我刚刚将所有方法和成员移至外部类。


一旦匿名类实例被隐式转换为命名类型,它就无法被转换回来,因为匿名类型没有名称。您可以通过以下方式访问匿名内部类的其他成员this在类内,在紧接表达式之后的表达式中,可以通过方法调用推断并返回类型。

Object obj = new Object() {
    void fn() {
        System.err.println("fn");
    }
    @Override public String toString() {
        fn();
        return "";
    } 
};
obj.toString();



new Object() {
    void fn() {
        System.err.println("fn");
    }
}.fn();


identity(new Object() {
    void fn() {
        System.err.println("fn");
    }
}).fn();
...
private static <T> T identity(T value) {
    return value;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用某些语法访问匿名内部类中的新方法吗? 的相关文章

随机推荐