一、dart 究竟是值传递还是 引用传递?
首先声明个人结论,有问题欢迎讨论
结论:基本数据类型是值传递,其他类型是引用传递
我在前期开发期间经常会踩的一个坑就是:
当传递(包含多字段的自定义数据类型的对象)时,经常会出现接收处修改了某一个属性值,导致传递处的数据变化。
写个简单的例子重现一下:
var aList = ['唱', '跳', 'rap'];
Human x1 =Human(aList, 1);
Human x2 = x1;
x2.age =2;
x2.habits.add('篮球');
print('''
x1 = $x1;
x2 = $x2;
''');
class Human {
List?habits;
int?age;
Human(this.habits, this.age);
Human.copyFrom(Human old) {
habits =List.from(old.habits ?? []);
age = old.age;
}
@override
StringtoString() {
return '$habits and age is $age';
}
}
![](https://img.haomeiwen.com/i11538536/874f70534970f489.png)
那我通常的处理方式就是在bean里面提供一个copy方法,对list做处理,断开引用传递
![](https://img.haomeiwen.com/i11538536/51debcf784d8aef3.png)
![](https://img.haomeiwen.com/i11538536/13f33d89653f65e6.png)
![](https://img.haomeiwen.com/i11538536/6c1e70ee99b5a612.png)
当然实际开发中情况不一定这么简单,可能我们传递的并不是一个数据模型,有可能是我们的操作model,这个时候再去写copy方法可能就会有点麻烦,所以我们会祭出大杀器 Tojson 再 FromJson,懂?
网友评论