Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建在类之间共享其属性的对象_Java - Fatal编程技术网

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

Java 创建在类之间共享其属性的对象,java,Java,我想创建一个类a的对象,它在类B、类C和类D中初始化 这个目标应该是共享的;也就是说,如果在这些类(C和D)中对objA进行任何更改,则即使在objC之后,“objD”也会被销毁,假定B类是主类。我想使用它的属性是B类 class A {} class B { initialize class A object and use-change its property initialize class C object and use-change its property init

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

这个目标应该是共享的;也就是说,如果在这些类(C和D)中对
objA
进行任何更改,则即使在
objC
之后,“objD”也会被销毁,假定
B类
是主类。我想使用它的属性是
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}

尝试将对象设置为静态,这样,对该对象的一个实例所做的任何更改都将在使用该对象的所有对象(位于同一线程中)中保持一致。

非静态尝试如下所示:

您的目标对象:

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();
    }
}

这本质上是一个单例模式,您可以传递您的类,也可以从main获取它。我个人更喜欢后者,比如:

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%实现它的方式(如果要传递主类实例,需要注意加载的顺序),但是对于类似的东西,我通常发现它是最干净的,并且为整个项目中的所有类提供了最简单的可用性。

将类a的对象从主类传递给其他类,以便它们共享相同的实例,从而进行更改。这意味着您将只从主类实例化它。您可以尝试稍微改进您的问题吗?很难理解您想要实现什么。然后使用关键字“volatile”,这将使每个线程使用相同的对象,而不是专门为每个线程缓存它。请尝试查看关键字volatile的以下解释: