创建现有对象飞镖的新对象实例



所以我的代码中基本上有以下问题:

我有一个集,我添加我的对象:

ProductInstance p = ProductInstance("name", 3);
products.add(p);

那么我修改对象&并用它执行一个方法:

p.zahl = 5;
addProduct(p);

然后,这些方法打印出这两个值,并且由于对象引用,它是相同的:/

addProduct(ProductInstance product) {
ProductInstance? temp;
if (products.isNotEmpty) {
for (var element in products) {
if (true) {
temp = element;
}
}
if (temp != null) {
print(temp.zahl);
print(product.zahl);
}
}
if (products.isEmpty) {
products.add(product);
}
}

因此,我想做的是在不进行大量重构的情况下,传递方法中现有p的一个新实例。我能做什么?

实现相同行为的完整代码:

main() {
ProductInstance p = ProductInstance("name", 3);
products.add(p);
p.zahl = 5;
addProduct(p);
}
Set products = {};
class ProductInstance {
String name;
int zahl;
ProductInstance(this.name, this.zahl);
}
addProduct(ProductInstance product) {
ProductInstance? temp;
if (products.isNotEmpty) {
for (var element in products) {
if (true) {
temp = element;
}
}
if (temp != null) {
print(temp.zahl);
print(product.zahl);
}
}
if (products.isEmpty) {
products.add(product);
}
}

在两个对象上使用=运算符时,它们都指向同一个对象。

此外,当您使用p.zahl = 5;更改内部的值时,您也在更改产品集内部的值。我不完全理解你想做什么,但这里有一种方法可以打印两个不同的值。您还需要声明一个setter值,如下所示

main() {
ProductInstance p = ProductInstance("name", 3);
products.add(p);
//p.zahl = 5; dont change the value here
addProduct(p);
}
Set products = {};
class ProductInstance {
String name;
int zahl;
set setZahl(int k) {
zahl = k;
}
ProductInstance(this.name, this.zahl);
}
addProduct(ProductInstance product) {
ProductInstance? temp;
if (products.isNotEmpty) {
for (var element in products) {
if (true) {
temp = ProductInstance(element.name, element.zahl +2); //create a new object

}
}
if (temp != null) {
print(temp.zahl);
print(product.zahl);
}
}
if (products.isEmpty) {
products.add(product);
}
}

最新更新