我目前正在编写程序,但我发现了一个问题。问题是在下面的循环中,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;
}
答案 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
命名。