创建一个在类之间共享其属性的对象

时间:2014-04-07 15:08:15

标签: java

我想创建一个A类的对象,它在B类,C类和D类中初始化

应该分享这个对象;也就是说,如果在这些类(C和D)中对objA进行了任何更改,则即使在objC之后,其内容仍然保持不变,' objD'被摧毁,假设class B是主要阶级。我想使用它的属性是class B

class A {}

class B
{
  initialize class A object and use-change its property
  initialize class C object and use-change its property
  initialize class D object and use-change its property
}

class C{initialize class A object and use-change its property}

class D{initialize class A object and use-change its property}

class X{initialize B and destroy objC,objD, from objB use property of objA of class B}

3 个答案:

答案 0 :(得分:1)

非静态尝试将如下所示:

您的目标对象:

public class A {

}

你的课程,与对象有关:

public class C {
    private final A a;

    public C(final A a) {
        this.a = a;
    }

    public foo() {
        // do something with a
    }
}

public class D {
    private final A a;

    public D(final A a) {
        this.a = a;
    }

    public otherFoo() {
        // do something with a
    }
}

你的主要课程:

public class B {

    public static void main(String[] args) {
        final A a = new A();

        final C c = new C(a);
        final D d = new D(a);


        c.foo();
        d.otherFoo();
    }
}

答案 1 :(得分:0)

尝试将对象设置为静态,使得对该对象的一个​​实例所做的任何更改在使用该对象的所有对象中都是一致的。

答案 2 :(得分:0)

这基本上是一个单例模式,你可以传递你的类或从主要的。我个人更喜欢后者,如下:

public class YourMain {

    private final ClassA clazzA;
    private final ClassB clazzB;
    private final ClassC clazzC;
    private final ClassD clazzD;


    public YourMain() {
        this.clazzA = new ClassA();
        this.clazzB = new ClassB(this);
        this.clazzC = new ClassC(this);
        this.clazzD = new ClassD(this);


        this.clazzB.doSomething();
    }

    public ClassA getClassA() {
        return this.clazzA;
    }

}

从那里,您可以链接到其他类中的主类:

public class ClassB {

    private final YourMain project;

    public ClassB(YourMain project) {
        this.project = project;
    }

    public void doSomething() {
        this.project.getClassA().someMethod();
    }

}

当然,这不是你想要实现它的100%(如果你传递你的主类实例,你需要记住你加载的顺序),但对于像这样的东西,我通常会发现它是最干净,并为项目中的所有课程提供最简单的可用性。