繁体   English   中英

如何通过 Java 反射获得未命名的内部 class 的实例?

[英]How can I get an instance of non-named inner class by Java reflection?

编写如下示例代码:

interface DisplayListener {
    public void display();
}

class Outer {
    public void prepare() {
        register(new DisplayLitener() {
            public void display() { /* do something */ }
        });
    }

    public void print() {
        // TODO: print all instances of DisplayerListener
    }
}

我尝试了一种使用 getFields() 和 getDeclaredFields() 的方法。 未找到预期结果。

任何机构都可以通过 Java 反射找到一种方法来执行由 TODO 标记的执行?

非常感谢。

当你写

new DisplayListener() {
  public void display() {
    ...
  }
}

您正在声明一个新的匿名内部 class 实现 DisplayListener 并创建它的实例。 因此,在这种情况下,反思对您没有帮助。 上面的语句只是创建了一个普通的 java object ,您可以将其保存在列表中,如下所示:

public class Outer {

  List<DisplayListener> list = new ArrayList<>();

  public void prepare() {
    register(new DisplayListener() {
      @Override
      public void display() { /* do something */ }
    });
  }

  void register(DisplayListener displayListener) {
    list.add(displayListener);
  }

  public void print() {
    System.out.println(list);
  }

  public static void main(String[] args) {
    Outer o = new Outer();
    o.prepare();
    o.prepare();
    o.print();
  }
}

此示例打印“[Outer$1@5ca881b5, Outer$1@24d46ca6]”。 class Outer$1 表示匿名内部 class,我们在列表中有 2 个实例。 "

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM