dart 从通用列表(数字)初始化通用字段(数字)

6qqygrtg  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(66)

我的课

class MyType<E extends num> {
  final E data;
  MyType(this.data);
  MyType.fromList(List<E> list)
      : data = list.asMap().containsKey(0) ? list[0] : 0 as E;
}
...
 final o1 = MyType<double>.fromList([]);

字符串
为什么我得到这个错误
未处理的异常:类型“int”不是类型强制转换中类型“double”的子类型
当类型被限制为E extends num时,如何初始化数值字段
你的详细回答非常感谢

lmvvr0a8

lmvvr0a81#

我不确定是否有更正确(和/或漂亮)的方法来做到这一点,但由于num被限制为只能有intdouble作为嵌套类型,我们可以添加类型检查来确定我们使用的值:

class MyType<E extends num> {
  final E data;

  MyType(this.data);
  MyType.fromList(List<E> list)
      : data =
            list.asMap().containsKey(0) ? list[0] : ((E == int) ? 0 : 0.0) as E;
}

void main() {
  final o1 = MyType<int>.fromList([]);
  print(o1.data); // 0

  final o2 = MyType<double>.fromList([]);
  print(o2.data); // 0.0

  final o3 = MyType<num>.fromList([]);
  print(o3.data); // 0.0
}

字符串
可以通过将此逻辑移动到它自己的方法中来清理。

相关问题