Map castFrom() 方法能详细说一下嘛 ?

来源:5-5 Flutter之Dart常用数据类型(Map)

慕无忌6890528

2022-01-26

我看源码内容是:

  static Map<K2, V2> castFrom<K, V, K2, V2>(Map<K, V> source) =>
      CastMap<K, V, K2, V2>(source);

从网上查找的资料是:

     * 12. castFrom: castFrom<K, V, K2, V2>(Map<K, V> source) =>CastMap<K, V, K2, V2>(source)
     *     1. 不使用类型操作符, 从另一个map中初始化新的 Map, 此时新的 Map 中含有另一个 Map 中的资源 。
     *     2. 强制使用指定类型初始化 Map:
     *        1. 如果类型不匹配或者不兼容就会导致程序崩溃 。```

代码示例:

// castFrom() 方法:
Map<int, String> mapCaFrom1 = {1:'a',2:'b',3:'c'};

// Map resCaFrom1 = Map.castFrom<num,String>(mapCaFrom1);
//这行代码会出错,主要原因是testMap是<dynamic,dynamic>类型的,但是这里需要的是<int,String>类型的map

// Map resCaFrom2 = Map.castFrom<String,String>(mapCaFrom1);
//这行代码也会出错,因为无法将<String,String>类型的map转换为<int,String>类型的map

Map resCaFrom3 = Map.castFrom<String,Object>(mapCaFrom1); //正确`

可是实际运行并不正确, 报错内容是:
lib/data_type_map.dart:534:26: Error: Expected 4 type arguments.
Map resCaFrom3 = Map.castFrom<String,Object>(mapCaFrom1); //正确

org-dartlang-sdk:///third_party/dart/sdk/lib/core/map.dart:171:22: Context: Found this candidate, but the arguments don’t match.
static Map<K2, V2> castFrom<K, V, K2, V2>(Map<K, V> source) =>

写回答

1回答

CrazyCodeBoy

2022-01-30

mapCaFrom1 在创建的时候已经指定了类型为Map<int, String>;所以在使用castFrom的时候要么不指定类型,要么类型和mapCaFrom1的一一对应。

0
0

Flutter从入门到进阶 实战携程网App 一网打尽核心技术

解锁Flutter开发新姿势,,系统掌握Flutter开发核心技术。

4788 学习 · 3270 问题

查看课程