它创建的实例可访问的实例

时间:2019-01-06 08:47:39

标签: java

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

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实例?

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

1 个答案:

答案 0 :(得分: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的封闭实例关联。