gpt4 book ai didi

Java:在参数化类型中使用本地类作为本地类内部引用的本地变量

转载 作者:行者123 更新时间:2023-12-02 07:44:57 24 4
gpt4 key购买 nike

我正在 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 之前定义它。那么如何打破这种循环依赖呢?

最佳答案

So how do I break this circular dependency?

我强烈建议将本地类分解为私有(private)静态嵌套类。我不能说我曾经见过在方法内声明的命名类的愉快使用。虽然我通常对“它仅在一种方法中使用”部分表示赞赏,但当您声明该类时,该方法已经达到中等长度。

当然,您始终可以使用原始类型进行声明,然后稍后进行强制转换...这可能会起作用,但显然这会很糟糕。

关于Java:在参数化类型中使用本地类作为本地类内部引用的本地变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com