飞镖,如何获得特定成员的符号?

时间:2014-05-14 21:01:56

标签: reflection dart dart-mirrors

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

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
}

1 个答案:

答案 0 :(得分:2)

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

虽然有点迂腐,但你没有得到一个符号,你使用一个符号(#iWantThisSymbol)来获得一个成员,在这种情况下是一个方法。所以我会把它重写为:

import 'dart:mirrors';

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

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

此外,关于where()使用

的一些事项
  1. 如果你想过滤符号列表,你不需要将它们转换成字符串,你可以直接比较符号实例。
  2. .where()返回一个可迭代的,即使只有一个项匹配。您可能希望firstWhere()始终返回单个项目。
  3. var justTheSymbolIWant = allSymbols.firstWhere((symbol) => symbol == #iWantThisSymbol);