4

我想创建一个非静态类,它可以通过它创建的实例访问它的实例,例如:

public class Foo {
    private String name;

    public Foo(String name) {
        Bar bar = new Bar();
        bar.getFooName();
        this.name = name;
    )

    public String getName() {
        return name;
    }
}


public class Bar {
    String getFooName() {
        return Foo.toString(); //How do I get the Foo that created it?
    }
}


public class Main {
    public static void main(String[] args) {
        new Foo("Steve");
        new Foo("Bob");
    }
}

如果我将 Foo.name 设为静态,则所有实例都将具有相同的名称。我可以在创建 Bar 时将 Foo 的实例作为变量传递,但这会变得混乱,假设 bar 生成了更多也想访问 Foo 的对象。是否有某种方法允许 Bar 和它创建的所有对象访问创建它们的 Foo 实例?

编辑:上下文是一个非静态主类,它创建许多不同类的实例。当主类的多个实例可能存在时,每个实例都需要能够找到由创建它的主实例创建的其他实例

4

1 回答 1

1

您可以将Foo引用传递给Bar构造函数:

public class Foo
{
    String name;
    public Foo(String name) {
        this.name = name;
        Bar bar = new Bar(this);   
    }
    public String getName () {
        return this.name;
    }
}

public class Bar 
{
    Foo creator;

    public Bar (Foo creator) {
        this.creator = creator;
    }

    String getFooName() {
        return creator.getName();
    }
}

不过,我不确定Bar在构造函数中创建实例Foo而不保留对它的引用有什么意义。

另一种选择是创建Bar一个内部类Foo

public class Foo
{
    String name;
    public Foo(String name) {
        this.name = name;
        Bar bar = new Bar();
    }
    public String getName () {
        return this.name;
    }

    public class Bar
    {
        public Bar () {
        }
        String getFooName() {
            return getName();
        }
    }
}

这样,每个Bar实例都将与Foo.

于 2019-01-06T08:50:24.797 回答