Java의 단일 메소드에서 특정 알고리즘을 구현하고 있습니다. 이 알고리즘은 다른 곳에서는 사용되지 않는 데이터 구조가 필요하기 때문에 로컬 클래스를 사용하는 것이 적절하다고 생각합니다. 알고리즘의 마지막 단계는 메서드에서 이전에 생성 된 모든 개체를 반복해야하므로 로컬 클래스의 생성자를 새로 만든 개체를 목록에 추가한다고 생각했습니다. Java에서 로컬 클래스는 final
으로 선언 된 로컬 변수에 액세스 할 수 있습니다. 분명히 내가 로컬 클래스 내에서 참조 할 수 있습니다 전에 fooList
선언해야하기 때문에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);
}
이 실패 : 그래서 나는 이런 식으로 뭔가를 시도했다. 분명히 내가 그것을 참조하기 전에 클래스 Foo
정의가 필요하기 때문에,
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);
}
를하지만이 역시 실패 : 좋아, 좋아, 내가 생각, 난 그냥 방법의 시작 부분에 fooList
를 선언 할 수 있습니다. 그렇다면이 순환 의존성을 어떻게 깨뜨릴 수 있습니까?
메쏘드에 내부 클래스를 생성하고 그 클래스의리스트를 사용한다면 당신은 틀린 설계를하고있는 것입니다. 어쩌면 이것을하기 위해 외부 클래스를 추가해야 할 것입니다. 그것은 나에게 1000 라인 방법의 시작처럼 들리네 ... –