Java,Person的所有实例都链接到一个对象

时间:2012-12-18 17:00:21

标签: java

我目前正在编写程序,但我发现了一个问题。问题是在下面的循环中,Person类的所有实例都附加到Item的一个实例。我想要的是每个人都有自己的物品。你有什么建议吗?

班级模拟:

public void simulate(int days){

    for(int i=0;i<days;i++) {

        int persons = 10;

        for(int j=0;j<persons;j++){

            Person person = new Person();

            Item item = new Item();

            person.setItem(item);
        }
     }
 }

班主任:

private Item item;

public void setItem(Item item)
{
        this.item = item;
}

5 个答案:

答案 0 :(得分:3)

我怀疑您的get应该是set

对于要使用同一个对象的所有Person对象,您必须创建字段static。请勿这样做,请从此字段中删除static关键字。我建议你不要让你的字段静态,除非它们是常数(如果可能的话)

答案 1 :(得分:2)

你的代码有各种各样的错误,我确信它不会编译。

如果要构建一个Person对象,并在构造函数上传递object类型的参数,则需要执行以下操作:

Object someKindOfObject = new Object(); //should really be a specific type...
Person person = new Person(sometKindOfObject);

getSomething方法永远不应该改变对象的状态,只返回有关它的信息。如果您不想使用构造函数选项,请创建一个setObject方法。

答案 2 :(得分:2)

  

我想要的是每个人都有自己的物品。

但这正是你正在做的事情。您正在创建Person的实例,并且每个新创建的实例都会收到新创建的Item实例

for(int j=0;j<persons;j++){
  Person person = new Person();
  Item item = new Item();
  person.setItem(item);
}

只是不保留对已创建的所有对象的引用。所以他们迟早会被垃圾收集。你的循环相当于

for(int j=0;j<persons;j++){
  new Person().setItem(new Item());
}

答案 3 :(得分:1)

你在哪里存储人物对象?每次你用新的参考文件覆盖人物对象。因此,你将有一个单一的物体参考。这是你所期待的修正后的代码。猜; - )

public void simulate(int days){

    for(int i=0;i<days;i++) {

        int persons = 10;

        Person[] personArray = new Person[persons];

        for(int j=0;j<persons;j++){

            personArray[j] = new Person();

            Object object = new Object();

            personArray[j].setObject(object);
        }

//here you have the reference to all person objects in array
     }
 }

班级人员

public void setObject(Object object)
{
        this.object = object;
}

答案 4 :(得分:-1)

现在代码工作正常或问题不明显。 OP应提供有关他/她收到的错误的更多详细信息。

初始帖子出现错误:

public void getObject(Object Object)
{
        this.object = object;
}

您应该将正式参数命名为object而不是Object,即写

public void getObject(Object object)

而不是

public void getObject(Object Object)

Java区分大小写。

this.object = object;在您的代码中不执行任何操作,因为将字段object分配给自己。单独的变量Object不起作用。你应该得到警告。

另外,您最好为方法setObject命名。