我有一个包含大量属性的类,这些属性映射到我在别处解析为Map
对象的一些JSON数据。我想通过传入这个地图来实例化一个类:
class Card {
String name, layout, mana_cost, cmc, type, rarity, text, flavor, artist,
number, power, toughness, loyalty, watermark, border,
timeshifted, hand, life, release_date, starter, original_text, original_type,
source, image_url, set, set_name, id;
int multiverse_id;
List<String> colors, names, supertypes, subtypes, types, printings, variations, legalities;
List<Map> foreign_names, rulings;
// This doesn't work
Card.fromMap(Map card) {
for (var key in card.keys) {
this[key] = card[key];
}
}
}
我宁愿不必手动分配所有内容。有办法做我想做的事吗?
答案 0 :(得分:2)
我认为在语言本身中有一种很好的方法。 反思将是一种方法,但在浏览器中避免它是一种好的做法,因为它可能导致代码膨胀。
reflectable
包可以限制反射的负面影响,并提供几乎相同的功能。
我使用代码生成方法,您可以使用build,source_gen等工具生成分配值的代码。
built_value是一个使用该方法的包。这甚至可能直接适用于您的用例。