Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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_Object_Permanent - Fatal编程技术网

永久java对象

永久java对象,java,object,permanent,Java,Object,Permanent,我想知道(必须有一个简单的解决方案)是否有一种方法可以生成许多对象,并在其他类和这些类中的对象中使用它们,而不必更新它们(在Java中)。例如: 类A、B和C构成对象A、B和C。 然后我有类D,它构成对象D。 现在我想在a中使用d,改变它,在b中使用d,在那里改变它,在c中使用d,并且仍然有a和b的所有变化。 我知道在函数中使用d作为参数并返回d是可能的,但这在我正在编写的程序中是没有用的 有什么帮助吗 好的,我的代码示例: public class A { D d = new D ();

我想知道(必须有一个简单的解决方案)是否有一种方法可以生成许多对象,并在其他类和这些类中的对象中使用它们,而不必更新它们(在Java中)。例如:

类A、B和C构成对象A、B和C。 然后我有类D,它构成对象D。 现在我想在a中使用d,改变它,在b中使用d,在那里改变它,在c中使用d,并且仍然有a和b的所有变化。 我知道在函数中使用d作为参数并返回d是可能的,但这在我正在编写的程序中是没有用的

有什么帮助吗

好的,我的代码示例:

public class A {
   D d = new D ();
   A(D dObject){
     this.d = dObject;
   }
   public void add () {
     DObject.add(5);
   }
}

public class B {
   D d = new D ();
   B(D dObject){
     this.d = dObject;
   }
   public void add () {
     DObject.add(5);
   }
}

public class C {
   D d = new D ();
   C(D dObject){
     this.d = dObject;
   }
   public void add () {
     DObject.add(5);
   }
}
public class D {
   public int x=0;
   public void add (int y){
      x +=y;
   }
}

// in main class:
D d = new D();
A a = new A(d);
B b = new B(d);
C c = new C(d);

a.add();
b.add();
c.add();

// d.x should give 15 now. 
我想你的意思是根据你的描述。

看看
它仅在需要类D的单个实例时有效,但可以创建单个实例来存储其他对象的引用。希望这能有所帮助。

我不确定我是否理解正确-如果您纠正语法错误,您发布的代码完全符合您的要求(
d.x
为15)

以下是一个应该有效的版本:

public class A {
   D d;
   A(D dObject){
     this.d = dObject;
   }
   public void add () {
     d.add(5);
   }
}

public class B {
   D d;
   B(D dObject){
     this.d = dObject;
   }
   public void add () {
     d.add(5);
   }
}

public class C {
   D d;
   C(D dObject){
     this.d = dObject;
   }
   public void add () {
     d.add(5);
   }
}
public class D {
   public int x=0;
   public void add (int y){
      x +=y;
   }
}

// in main class:
D d = new D();
A a = new A(d);
B b = new B(d);
C c = new C(d);

a.add();
b.add();
c.add();

// d.x should give 15 now. 
如果希望
d
保持不变而不是改变(例如,结尾处
d.x==0
),可以执行以下操作之一:

  • 在A、B、C的构造函数中克隆参数
    dObject
    ,这样每个参数都有自己的
    D
    对象
  • 使
    D
    不可变,并让其
    add
    方法返回一个新的
    D
    对象。
    A
    B
    C
    add
    方法将实现
    d=d.add(5)

D等于D°??。。你需要更好地重新表述你的问题。这是我认为我读过的最复杂的问题。请尝试将其重新表述为有意义的内容…要跟踪的内容太多了…而且,这需要3个不同的“d”实例或某种版本控制引擎…听起来像是在寻找全局变量。这似乎是一个糟糕的想法。这听起来是一个非常糟糕的想法,与任何人写过的关于面向对象编程的东西都背道而驰。你为什么不能把它当作一个论据呢?这些对象/类做什么?为什么它们不能是静态的方法?他没有提到,a改变了b,c改变了b。。。尽管问题很神秘,但可变的对象是显而易见的。谢谢,这不是我想要的那种代码,但我一定会尝试。