首页 > 解决方案 > 在 Dart 的 Map 对象中创建通用属性

问题描述

我有这张地图:

final x = {
  "y": {},
  "z": {},
}

我希望 $y 属性在整数类型的属性内保存一个类型为 $e 的对象,即:

x = {
  "y": {
    1: {/*e*/},
    2: {/*e*/},
    3: {/*e*/},
  }
}

虽然我希望 $z 属性保留 $g 而不是 $e,就像 $y 一样,但我希望它保留 $g 而不是 $e,即:

x = {
  "y": {
    1: {/*e*/},
    2: {/*e*/},
    3: {/*e*/},
  },
  "z": {
    1: {/*g*/},
    2: {/*g*/},
    3: {/*g*/},
  }
}

我尝试了以下方法:

final x = {
  Map<int, e> "y": {},
  Map<int, g> "z": {},
}

这没有用。

我也试过:

x = {
  "y": {
    1: Map<e>,
  },
  "z": {
    1: Map<g>,
  }
}

也没有奏效,

我怎样才能在 Dart 中做到这一点?

标签: dart

解决方案


我不确定我是否正确理解了您的问题,但我认为您正在寻找类似的内容:

class E {}

class G {}

void main() {
  var e = E();
  var g = G();

  var x = <String, Map>{
    "y": <int, E>{
      1: e,
      2: e,
      3: e,
    },
    "z": <int, G>{
      1: g,
      2: g,
      3: g,
    }
  };
}

通常,您为变量指定类型,并且可以在实例化泛型时指定类型(<K, V>{}构造一个Map<K, V>文字)。请注意,类型检查必须在运行时发生,并且不能在编译时静态执行。


推荐阅读