我想在对象之间共享数据。实际上,例如,有一个由水和个体组成的世界。我希望每个人都能接触到水。我考虑过改变Collection中的单个表,或者使Water成为Singleton,但说真的,最好的设计是什么?(我们可能在单个对象上有多个线程进程...因此,我们可能需要一个线程安全的实现。)(另外,我想知道如何通过参数传递或为每个个体实例化Water,但这似乎不是最有效的实现(处理实例化)?)
一组简单的对象,用来修正想法(这组对象根本不共享水,个体在这里显示'null‘):
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;
}
}非常感谢您提前给予我们的帮助和建议。请随时分享您的想法:)
发布于 2011-11-27 15:54:43
在迭代Individual数组时获取null值的原因是,对于每个数组元素,您还没有创建一个引用将占用它的实例。实例化一个数组仅仅创建了一个顺序的null指针内存块。正确的解决方案是:
tribe = new Individual[10];
for(int i = 0; i < tribe.length; i++) {
tribe[i] = new Individual();
}关于“个人访问水”的问题,您必须在World中使用public可见性修饰符声明Water的封装实例,以授予对包含World的包外部的所有类的访问权限。
由于Individual和World驻留在同一个包中,因此没有必要使用public修饰符。
https://stackoverflow.com/questions/8284030
复制相似问题