Dart中两种类型的比较
我正在寻找一种方法来比较Dart中的两种类型,并在它们相同时获得Dart中两种类型的比较,dart,Dart,我正在寻找一种方法来比较Dart中的两种类型,并在它们相同时获得True 我有一个方法: SomeItemType示例方法(映射值){ if(SomeItemType.toString()==“BuiltMap”){ 将BuiltMap.from(值)作为SomeItemType返回; } // (...) } 其中我必须检查类型参数SomeItemType是否实际等于类型BuiltMap。 到目前为止,我发现的唯一方法是上面的字符串比较,在我看来这不是很优雅 我尝试过以下解决方案,但都不适合
True
我有一个方法:
SomeItemType示例方法(映射值){
if(SomeItemType.toString()==“BuiltMap”){
将BuiltMap.from(值)作为SomeItemType返回;
}
// (...)
}
其中我必须检查类型参数SomeItemType
是否实际等于类型BuiltMap
。
到目前为止,我发现的唯一方法是上面的字符串比较,在我看来这不是很优雅
我尝试过以下解决方案,但都不适合我:
SomeItemType是BuiltMap
//返回False
SomeItemType==BuiltMap
//错误:运算符“需要检测类型变量是否包含与某些已知类型“相同”的类型
在这个检查中,我可能不会要求相等,我只会检查变量的类型是否是已知类型的子类型
你可以这样做:
class_TypeHelper{}
bool isSubtypeOf()=>\u TypeHelper()是\u TypeHelper;
//或者只是…=>[]是列表;
...
如果(isSubtypeOf()){…}
如果要检查类型相等,则必须确定类型相等的含义。
最简单的是“相互子类型”,这意味着:
bool isMutualSubtypes()=>isSubtypeOf()&&isSubtypeOf();
//or=>isSubtypeOf();
//or=>isSubtypeOf();
这将接受,例如,ismutalsubtypes()
,因为这两种类型都是顶级类型
类型标识更难检查,因为语言本身没有这种概念。如果类型是相互的子类型,则它们在运行时被认为是等效的(我们静态地区分void
和dynamic
,但在运行时不区分)。
您可以尝试以下方法:
bool isSameType()=>S==T;
但类型
对象的平等性是非常不明确的,不能保证比相互子类型更好地工作。
绝对不要使用字符串比较:
//不要使用!
bool isSameType()=>“$S”==“$T”;//糟糕!
因为可以使用相同的名称创建不同的类型。您能为示例添加更多详细信息吗?如果不知道如何调用exampleMethod
,“就不可能真正了解问题。您需要检测类型变量是否包含与某个已知类型“相同”的类型。”
这正是我所需要的。谢谢你的回答!