大家好,我只是测试一下"const";以及";新的";关键字,我发现:如果我想创建完全相同的实例,我必须:
- 添加";const";构造函数声明之前的关键字
- 添加";const";关键字放在我想使用对象的任何位置之前
像这样:
class A {
final int x;
const A(this.x);
}
// when use
var a = const A(0);
var b = const A(0);
identical(a,b); // this is true, they are same instance
---------------------------好吧,到目前为止,这还可以,但是----------------------------当我也想创建两个相同的";小部件";,我失败了!!
像这样:
class A extends StatelessWidget {
final int x;
const A(this.x,{Key? key })
: super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}
// when use
var a = const A(0);
var b = const A(0);
identical(a,b); // this is false!!!!!! why?????????
所以。。。。有人可以告诉我如何创建两个相同的实例小部件吗??谢谢。:(
欢迎使用SOF。
这是因为Dart首先实例化一个A,然后使其为常数,请不要将常数与static
混淆。
第一个样本给出相同=true的原因是因为两个对象具有相似的hashCode
(https://api.dart.dev/stable/2.10.5/dart-core/Object/hashCode.html)
hashCode用于对象比较操作,如==
你应该这样写,这实际上是无用的!:
var z = const A(0);
var a = z;
var b = z
identical(a,b);
或者您应该覆盖==和hashCode