首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在对象上共享数据的最佳设计是什么?

在对象上共享数据的最佳设计是什么?
EN

Stack Overflow用户
提问于 2011-11-27 14:28:36
回答 1查看 76关注 0票数 0

我想在对象之间共享数据。实际上,例如,有一个由水和个体组成的世界。我希望每个人都能接触到水。我考虑过改变Collection中的单个表,或者使Water成为Singleton,但说真的,最好的设计是什么?(我们可能在单个对象上有多个线程进程...因此,我们可能需要一个线程安全的实现。)(另外,我想知道如何通过参数传递或为每个个体实例化Water,但这似乎不是最有效的实现(处理实例化)?)

一组简单的对象,用来修正想法(这组对象根本不共享水,个体在这里显示'null‘):

代码语言:javascript
复制
package myworld.testing;

public class World {

    static Water evolution;
    static Individual [] tribe;

    public World(){
        evolution=new Water();
    }
    public static Water getWater(){
        return evolution;
    }

    public static void main(String[] args) {
        evolution=new Water();
        System.out.println("info "+evolution.get());
        tribe = new Individual[10];
        for(Individual individual : tribe){
            System.out.println("trace "+individual);
        }

        evolution=new Water("sprakly");
        System.out.println("info "+evolution.get());
        for(Individual individual : tribe){
            System.out.println("trace "+individual);
        }

        evolution.set("salty");
        System.out.println("info "+evolution.get());
        for(Individual individual : tribe){
            System.out.println("trace "+individual);
        }
    }

}

package myworld.testing;

public class Individual {
    int data;
    public Individual(){
        data=0;
    }
    public Individual(int i){
        data=i;
    }
    public void set(int i){
        data=i;
    }
    public int get(){
        return data;
    }
    public String toString(){
        return World.getWater().get()+" "+data;
    }
}

package myworld.testing;

public class Water {
    private static Water instance = null;
    String type;
    public static Water getInstance(){
        if(instance == null) {
             instance = new Water();
          }
          return instance;
    }
    public Water(){
        type="1";
    }
    public Water(String str){
        type=str;
    }
    public void set(String str){
        type=str;
    }
    public String get(){
        return type;
    }
}

非常感谢您提前给予我们的帮助和建议。请随时分享您的想法:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-27 15:54:43

在迭代Individual数组时获取null值的原因是,对于每个数组元素,您还没有创建一个引用将占用它的实例。实例化一个数组仅仅创建了一个顺序的null指针内存块。正确的解决方案是:

代码语言:javascript
复制
tribe = new Individual[10];
for(int i = 0; i < tribe.length; i++) {
    tribe[i] = new Individual();
}

关于“个人访问水”的问题,您必须在World中使用public可见性修饰符声明Water的封装实例,以授予对包含World的包外部的所有类的访问权限。

由于IndividualWorld驻留在同一个包中,因此没有必要使用public修饰符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8284030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档