我想创建一个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}
答案 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%(如果你传递你的主类实例,你需要记住你加载的顺序),但对于像这样的东西,我通常会发现它是最干净,并为项目中的所有课程提供最简单的可用性。