我已将变量存储在具有代码名称的类中。
假设我想从该课程中获取XVG,我想做
String getIconsURL(String symbol) {
var list = new URLsList();
//symbol = 'XVG'
return list.(symbol);
}
class URLsList{
var XVG = 'some url';
var BTC = 'some url';
}
有人可以帮我实现这个目标还是为我提供更好的解决方案?
答案 0 :(得分:3)
在颤动时使用飞镖doesn't support reflection。
如果您想要出于某种原因直接在代码中使用该文字,我建议您使用文字替换(使用自己喜欢的工具或使用intellij&find;替换为正则表达式)将其改为地图,即
final Map<String, String> whee = {
'XVG': 'url 1',
'BTC': 'url 2',
};
另一种方法是将其保存为JSON中的assets文件,然后在应用程序打开时加载并读取它,或者甚至在首次运行/需要时从服务器下载它(如果URL需要更新的频率高于您计划更新应用程序的时间。硬编码这样的数据并不一定总是好主意。
编辑:如何使用。
final Map<String, String> whee = .....
String getIconsURL(String symbol) {
//symbol = 'XVG'
return whee[symbol];
}
如果你在一个类中定义它,请确保你将它设置为静态,这样每次实例化它时它都不会生成另一个。
此外,如果您想要遍历它们,您可以选择使用entries
,keys
或values
- 请参阅Map Class documentation
答案 1 :(得分:1)
我只是实施getProperty(String name)
方法或[]
运算符,如:
class URLsList{
var XVG = 'some url';
var BTC = 'some url';
String get operator [](String key) {
switch(key) {
case 'XVG': return XVG;
case 'BTC': return BTC;
}
}
}
String getIconsURL(String symbol) {
var list = new URLsList();
return list[symbol];
}
您还可以使用reflectable包,通过代码生成,您可以使用类似反射的代码。
答案 2 :(得分:0)
假设该类是通过JSON对象创建的,则始终可以使用objectName.toJSON(),然后使用变量名作为数组索引来进行计算。