使用以下代码:
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
保留 List
的 Inner
实例,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/