java - 有没有办法让 Java 外部类的一个实例调用其所有的 Java 内部类实例?

标签 java android inner-classes weak-references

使用以下代码:

public class Outer {
    final int foo;

    public Outer(int foo) {
        this.foo = foo;
    }

    public Inner createInnerInstance(int bar) {
        return new Inner(bar);
    }

    public int getBarSum() {
        // TODO: implement
    }

    public class Inner {
        final int bar;

        public Inner(int bar) {
            this.bar = bar;
        }

        public int getBar() {
            return bar;
        }

        public int getFooPlusBar() {
            return foo + bar;
        }
    }
}

我想向 Outer 添加一个方法,它在每个 Inner 上调用一个方法。

这样做的一种方法是让 Outer 保留 ListInner 实例,getInnerInstance 附加到。这个问题是我不希望列表引用内部实例以防止它们被垃圾收集。在 Java 中是否可以使用某种形式的弱链接列表?

有什么不同的方法吗?

注意:我只寻找共享 Outer 特定实例的 Inner

最佳答案

如果外部类没有获得对内部类的引用,那么就没有(简单的)方法可以做到这一点。

在一个简单的层面上,想想内部类有另一个 this引用外部类的引用(您可以通过内部类中的 Outer.this 访问它)。

如果类 A 引用了类 B 的实例,但不是相反,找到引用 B 的特定实例的所有 A 实例的唯一方法是遍历 A 的所有实例并检查它们的 B引用。这已经从获取 A 的所有实例的困难部分开始了。

更简单的方法是跟踪创建的内部类,例如用List<Inner>里面Outer .

例子:

class Outer {
  List<Inner> inners = new LinkedList<>();

  public Inner createInnerInstance(int bar) {
    Inner inner = new Inner(bar);
    inners.add( inner );
    return inner;
  }
}

如果Inner可以再次删除实例,您必须处理它。当然,您可以使用较弱的引用,例如 WeakReference , SoftReference等等,如果您只是想获取仍然存在 的内部实例(您必须检查引用)。但是,根据内部类的大小,使用额外的引用实例可能不会导致更好的内存使用,因此请谨慎使用。

关于java - 有没有办法让 Java 外部类的一个实例调用其所有的 Java 内部类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262478/

相关文章:

Java:如何设计一个需要其子级的多个属性来处理文件的类?

java - 实例化另一个抽象类的内部抽象类

java - 为什么外部Java类可以访问内部类私有(private)成员?

当我调用 connect() 时,Java HttpURLConnection 没有连接

java - 为什么 BufferedReader 的 2 个引用在这里不独立运行?

java - Libgdx 在屏幕中使用 InputMultiplexer 覆盖 keyDown

Android adb 和 C++

java - java中匿名内部类成员不可访问

java - 如何向 JMapViewer 添加纬度/经度网格线

java.security.cert.CertPathValidatorException : Trust anchor for certification path not found. Android 2.3