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

3

我目前在编写一段程序,但是遇到了一个问题。问题是在下面的循环中,所有Person类的实例都附加到一个Item实例上。我想要的是每个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;
}

每次迭代都会创建一个新的“Object”,因此每个“Person”都拥有自己的“Object”。getObject() 应该改为 setObject() - Hunter McMillen
7
getObject() 作为一个 setter 很容易让人困惑。 - hmjd
new Person; 应该改为 new Person();。同样的,Object 也需要改为 Object()。除此之外,其他部分看起来都没问题,只是你的 getObject 方法应该改为 setObject - Rohit Jain
对不起,这是我在这个编辑器中编码的结果。我希望拼写错误已经消失,我们可以继续解决问题。 - stefana
你的最新版本应该可以工作。 - Dims
你的确切错误是什么?你如何观察它?使用System.identityHashCode()打印类实例以显示它们是相同的。 - Dims
5个回答

3
我猜你的get应该改为set
如果要让所有Person对象都使用同一个对象,你必须将字段设置为static。不要这样做,从该字段中删除static关键字。我建议除了常量(在可能的情况下)外,不要使字段静态。

2

你的代码完全错误,我确定它不能编译。

如果你想使用一个对象类型参数来构建Person对象,你需要这样做:

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

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


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());
}

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;
}

-1

现在代码看起来能够工作,或者问题不明显。楼主应该提供更多关于他/她收到的错误的细节。

初始帖子中的错误在这里:

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


“this.object = object;”是完全没问题的……只要他的代码中没有太多错别字。 - Jon7
@Hunter,你也错了。仔细看看形式参数的拼写。 - Dims
请记住,该行代码位于另一个类中。这是他没有给我们的类。因此,我们不知道是否有本地变量。 - Jon7
@Hunter,你可以创建一个名为 Object 的变量。试试看吧。 - Dims
@Hunter 目前的代码应该可以工作。我看不出任何原因导致赋值现在无法工作。可能 OP 还有其他问题,这里看不到。 - Dims
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接