当前位置:  开发笔记 > 编程语言 > 正文

访问内部匿名类成员

如何解决《访问内部匿名类成员》经验,为你挑选了2个好方法。

除了使用反射来访问匿名内部类的成员之外,还有其他方法吗?



1> Ivan Dubrov..:

您可以使用本地类而不是匿名类.看:

public class Test {
    public static void main(String... args) {
        class MyInner {
            private int value = 10;
        }

        MyInner inner = new MyInner();
        System.out.println(inner.value);
    }
}

您可以MyInner仅在方法体中引用类型.因此,在方法之外,您将无法使用未在其超类(java.lang.Object在本例中)或接口中声明的字段/方法.



2> Tom Hawtin -..:

匿名内部类具有类型但没有名称.

您可以访问未由命名超类型定义的字段.但是,一旦分配给命名类型变量,接口就会丢失.

显然,您可以从内部类本身访问字段.添加代码的一种方法是通过实例初始化器:

final AtomicInteger y = new AtomicInteger();
new Runnable() {
    int x;
    {
        x = 5;
        doRun(this);
        y.set(x);
    }
    public void run() {
        ... blah ...
    }
};

匿名内部类表达式返回的值具有匿名类型,因此您有一次机会在类本身之外使用它:

final int y = new Runnable() {
    int x;
    {
        x = 5;
        doRun(this);
    }
    public void run() {
        ... blah ...
    }
}.x;

您还可以通过类似于以下方式声明的方法传递它:

 T doRun(T runnable);

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有