有没有办法让 Java 外部 Class 的实例调用其所有 Java 内部 Class 的实例?

Is there a way for an instance of a Java Outer Class to call all its instances of a Java Inner Class?

使用以下代码:

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

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

在一个简单的层面上,考虑内部 classes 有另一个 this 引用,它引用外部 class(你可以通过内部的 Outer.this 访问它class)。

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

all 个实例的困难部分开始了

更简单的方法是跟踪创建的内部 classes,例如在 Outer.

里面有一个 List<Inner>

示例:

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

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

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

一组弱引用 (https://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html) 可能会解决您的问题。

也许你可以和 WeakReferences, for instance a WeakHashMap 一起工作。