我有一个Enum
和函数可以从中创建它,String
因为我找不到内置的方法
enum Visibility{VISIBLE,COLLAPSED,HIDDEN}
Visibility visibilityFromString(String value){
return Visibility.values.firstWhere((e)=>
e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
}
//used as
Visibility x = visibilityFromString('COLLAPSED');
但是似乎我必须为我拥有的每个Enum重写此函数,有没有办法在将Enum类型作为参数的地方写相同的函数?我试过了,但我发现我不能投给枚举。
//is something with the following signiture actually possible?
dynamic enumFromString(Type enumType,String value){
}
使用镜子,您可以强制某些行为。我有两个想法。不幸的是,Dart不支持键入函数:
import 'dart:mirrors';
enum Visibility {VISIBLE, COLLAPSED, HIDDEN}
class EnumFromString<T> {
T get(String value) {
return (reflectType(T) as ClassMirror).getField(#values).reflectee.firstWhere((e)=>e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
}
}
dynamic enumFromString(String value, t) {
return (reflectType(t) as ClassMirror).getField(#values).reflectee.firstWhere((e)=>e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
}
void main() {
var converter = new EnumFromString<Visibility>();
Visibility x = converter.get('COLLAPSED');
print(x);
Visibility y = enumFromString('HIDDEN', Visibility);
print(y);
}
输出:
Visibility.COLLAPSED
Visibility.HIDDEN
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句