reflection - Dart ,如何获取特定成员(member)的符号?

标签 reflection dart dart-mirrors

为类(class)的单个成员获取符号的最有效方法是什么?

import 'dart:mirrors';

class TestClass{
    void iWantThisSymbol(){}
    void butNotThisOne(){}
}

/**
 * I can get all the symbols and filter down but this isn't nice
 */
void main(){
    var allSymbols = reflectClass(TestClass).instanceMembers.keys;
    var justTheSymbolIWant = allSymbols.where((symbol) => symbol.toString().contains('iWantThisSymbol')); // this doesnt seem very efficient or maintainable
}

最佳答案

var justTheSymbolIWant = reflectClass(TestClass).instanceMembers[#iWantThisSymbol]

尽管有点学究,但您没有得到Symbol,而是使用Symbol(#iWantThisSymbol)来获取成员,在这种情况下,这是一种方法。所以我将其重写为:

import 'dart:mirrors';

class TestClass{
    void iWantThisMethod(){}
    void butNotThisOne(){}
}

void main(){
    var justTheMethodIWant = reflectClass(TestClass).instanceMembers[#iWantThisMethod];
}

另外,有关where()的使用的一些注意事项:
  • 如果确实要过滤符号列表,则不需要将它们转换为字符串,您可以直接比较符号实例。
  • .where()返回一个可迭代的,即使只有一个匹配的项。您可能需要firstWhere(),它总是返回单个项目。

  • var justTheSymbolIWant = allSymbols.firstWhere((symbol) => symbol == #iWantThisSymbol);
    

    关于reflection - Dart ,如何获取特定成员(member)的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23665055/

    相关文章:

    java - 转储 java 对象的属性

    dart - 运行Chartjs Dart示例

    flutter - 如何自定义 flutter 中的开关按钮

    plugins - 达特镜的 future

    c# - 将 Assembly 保存为适合 Assembly.Load 的字节数组

    c# - TargetInvocationException @ PropertyInfo.GetValue(target, null) 与目标类型 MemoryStream

    dart - 编译的AngularDart失败,并出现dynamic_injector错误

    reflection - 如何在 Dart 中从 String 创建闭包?

    java - getMethod 抛出方法未找到异常

    dart - 非平凡的构造函数可以调用 Future 返回函数吗(如何或替代)