所以我的代码中基本上有以下问题:
我有一个集,我添加我的对象:
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);
}
}