flutter - 如何在 dart 中获取通用对象的主要类型和子类型,例如 Type1, 我只想要 Type1 和 Type2 分开
问题描述
我想要 Flutter 中泛型类型的主类型和子类型。因此,例如,如果我有List<int>
,我想要List
andint
分开。如果我这样做 <int>[1,2,3].runtimeType
,它给了我List<int>
。但是,如果我只对该信息的 List 或 int 部分感兴趣怎么办。
我正在创建一个类型比较器来对我的数据进行排序
int typeSortHelper(Type type1, Type type2){
if(type1 == type2){
return 0;
}
if(type2 is List){
type2 = List;
}
switch(type1){
case int: return 1;
case double:{
int r;
if(type2 == int){
r= -1;
}else{
r= 1;
}
return r;
}
case String:{
int r;
if(type2 == int || type2 == double){
r= -1;
}else{
r= 1;
}
return r;
}
case List:{
int r;
if(type2 == int || type2 == double || type2 == String){
r= -1;
}else{
r= 1;
}
return r;
}
case Map:{
int r;
if(type2 == int || type2 == double || type2 == String || type2 == List){
r= -1;
}else{
r= 1;
}
return r;
}
}
}
所以当我这样打电话时:
r1 = typeSortHelper([1,2,3].runtimeType, 2.runtimeType);
它应该给我-1,而不是给我null。
解决方案
可悲的是,你还不能这样做。
因此,您在 2019 年(Dart 2.5)的实现将如下所示:
switch(smth.runtimeType){
case int: return processInt(smth);
case Uint8List: return process Uint8List(smth):
default: if(smth is Map<String, dynamic>){
processMapStringDynamic(smth);
} else if(smth is List<int>){
processListInt(smth);
} else throw('unimplemented for ${smth.runtimeType}');
}
推荐阅读
- listview - JavaFX ListView 滚动导致数据访问负载
- php - 在 docker 容器中为 php 启用soap
- facebook - 跟踪facebook朋友的编程语言是什么
- android - Android Casting 自定义视图
- javascript - 在 javascript 中重构 JSON 文件
- css - CSS变换div不为空
- javascript - Socket.io 重置 React 状态?
- flutter - 如何在 Flutter 中使用 GridView 创建不同大小的单元格?
- mysql - 致命错误:未捕获的错误:在 C:\xampp\phpMyAdmin\libraries\classes\DatabaseInterface.php:1544 中的 null 上调用成员函数存在()
- scorm2004 - SCORM 2004 - 从另一个 SCO 内部为 SCO 设置完成