java - 在java中的类之间共享更新数据的最佳方式

标签 java class share

我正在开发一个项目,但遇到了问题,我不知道在类之间共享更新数据的最佳方法。我当前执行此操作的方法是在其中包含类的静态实例,并让所有其他类更改该实例而不是原始类。

public class A{
  public static volatile instance;
  public B b = new B();
  public C c = new C();
  public D d = new D();
  public A(){
  this.instance = this;
  b.changeData();
  }
}

public class B{
  public void changeData(){
  A.instance.d.changeSomethingInD();
  }
}

现在,B 和 C 都可以访问 D 对其变量所做的所有更改。有更好的方法吗?

编辑1:我遇到的问题是所有其他类都可以访问更新的变量。这就是我之前所做的:

public class MainClass extends JavaPlugin{
  private RegionLoader rLoader;
  private ClassesLoader cLoader;
  private MessageHandler mHandler;
  private PlayerDates pDates;

  public MainClass(){

      dirMaker();

      mHandler = new MessageHandler(this);
      pDates = new PlayerDates(this);
      cLoader = new ClassesLoader(this);
      rLoader = new RegionLoader(this);

  }
//getters and setters
}

但问题是,如果 RegionLoader 本身发生了一些变化,ClassesLoader 将不会有更新的变量,并且会使用旧的变量,或者会吗?

最佳答案

为什么不直接将 A 传递到 B 的构造函数中。这样您就不需要使用静态数据。

   public class A{

      public B b;
      public C c = new C();
      public D d = new D();

      public A(){
         b = new B(this);
         b.changeData();
      }
    }

    public class B{
      private A a;

      public B(A a){
         this.a = a;
      }
      public void changeData(){
         a.d.changeSomethingInD();
      }
    }

您还可以检查观察者模式。

关于java - 在java中的类之间共享更新数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14227079/

相关文章:

java - 如何连接到 AWS Elasticsearch?

php - 扩展另一个的 PHP 类如何继承私有(private)函数?

java - Log4j 是否被放弃以支持 Slf4j?

CSS 类优先级

Java:LinkedList 类作为堆栈和队列

share - "Virtual users"与 Solaris 11 和 ZFS 共享

performance - 许多具有相同几何形状和 Material 的网格,我可以更改它们的颜色吗?

android - 我想分享带有单个字幕的多张图片

java - Hibernate ManyToMany 加入

java - 问:Mockito - Using @Mock and @Autowired