Flutter 不同类型的Dart相等

Flutter 不同类型的Dart相等,flutter,dart,enums,Flutter,Dart,Enums,我想实现像enum这样的类 @不可变 抽象类枚举{ 最终T值; @文字的 常量枚举([this.value]); 列表获取值=>value!=null?[value]:常量[]; @凌驾 布尔运算符==(对象?其他){ 如果(其他为T){ 返回值==其他; } 返回other is Enum&&other.value==value; } @凌驾 int get hashCode=>super.hashCode; } 类EnumClass扩展了Enum{ @文字的 常量枚举类(int值):超级(值

我想实现像enum这样的类

@不可变
抽象类枚举{
最终T值;
@文字的
常量枚举([this.value]);
列表获取值=>value!=null?[value]:常量[];
@凌驾
布尔运算符==(对象?其他){
如果(其他为T){
返回值==其他;
}
返回other is Enum&&other.value==value;
}
@凌驾
int get hashCode=>super.hashCode;
}
类EnumClass扩展了Enum{
@文字的
常量枚举类(int值):超级(值);
静态常量零=常量枚举类(0);
静态常量一=常量枚举类(1);
//你可以有任何你想要的功能
}
这样我就可以做下面的操作了

if(EnumClass.zero==0){
//这管用!
}
但是我的测试失败了

void main(){
测试('将EnumClass.0与0进行比较',(){
如果(EnumClass.zero==0){
打印('same');//这是打印的
}
expect(EnumClass.zero,0);//但测试失败
});
}
与0的比较按预期进行,但expect函数不起作用。 我应该怎么做才能通过考试?

请注意:

expect(EnumClass.zero,0);
失败,但:

expect(0,EnumClass.0);
成功
expect(实际,预期)
默认情况下使用
等于
匹配器
,而
等于
的实现

可以说,如果
expect(A,B)
通过比较
A==B
而不是
B==A
来匹配原始顺序会更直观,但是使用非对称等式将很容易出错,而且可能无论如何都不是一个好主意

另请参见。

注意:

expect(EnumClass.zero,0);
失败,但:

expect(0,EnumClass.0);
成功
expect(实际,预期)
默认情况下使用
等于
匹配器
,而
等于
的实现

可以说,如果
expect(A,B)
通过比较
A==B
而不是
B==A
来匹配原始顺序会更直观,但是使用非对称等式将很容易出错,而且可能无论如何都不是一个好主意


另请参见。

由于==通常被认为是对称的,我想知道如何解决这个问题。由于Dart不支持重载,如果其中一个类型涉及到一个您不控制的类,则无法真正使
运算符==
对称。您可以使一些
bool等于(objectobject1,object2)=>(object1==object2 | | object2==object1)
函数,如果您真的想要,但这可能仍然不是一个好主意,因为不对称也可能意味着
hashCode
值会不同。而且由于==通常被认为是对称的,我想知道如何解决这个问题。因为Dart不支持重载,如果其中一种类型涉及到一个您不控制的类,那么就不能真正使
操作符==
对称。您可以使一些
bool等于(objectobject1,object2)=>(object1==object2 | | object2==object1)函数,但这可能仍然不是一个好主意,因为不对称也可能意味着
hashCode
值会有所不同。