我正在用 Java 中的单个方法实现某种算法。该算法需要一个不会在其他任何地方使用的数据结构,因此对我来说使用本地类似乎很合适。算法的最后一步需要遍历方法中之前创建的所有对象,所以我想我会让本地类的构造函数将新创建的对象添加到列表中。在 Java 中,本地类可以访问声明的本地变量final
。所以我尝试了这样的事情:
public void doThing() {
class Foo {
public Foo() {
fooList.add(this); // FAILS: "cannot find symbol: variable fooList"
}
}
final ArrayList<Foo> fooList = new ArrayList<Foo>();
// algorithm goes here, instantiating some Foo objects:
Foo foo = new Foo();
// etc.
// now iterate through all the Foo objects that were created
for (Foo f : fooList)
System.out.println(f);
}
这失败了,因为显然我必须先fooList
声明,然后才能在本地类中引用它。好吧,好吧,我想,我将fooList
在方法的开头声明:
public void doThing() {
final ArrayList<Foo> fooList; // FAILS: "cannot find symbol: class Foo"
class Foo {
public Foo() {
fooList.add(this);
}
}
fooList = new ArrayList<Foo>();
Foo foo = new Foo();
for (Foo f : fooList)
System.out.println(f);
}
但这也失败了,因为显然我需要Foo
在引用它之前定义类。那么如何打破这种循环依赖呢?