我正在Java中使用单一方法实现特定算法。这个算法需要一个不会在其他地方使用的数据结构,所以我认为适合使用本地类。算法的最后一步需要遍历方法中早先创建的所有对象,所以我认为我会让本地类的构造函数将新创建的对象添加到列表中。在Java中,本地类可以访问声明为final
的局部变量。所以,我想是这样的:Java:在参数化类型中使用本地类作为本地类中引用的局部变量
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
之前我提到它。那么如何打破这种循环依赖?
如果您正在创建方法内部的类并使用该类的列表,那么您的设计就是错误的。也许你应该添加一个外部类来做到这一点。这听起来像是1000行方法的开始...... –