如何检查方法镜像是否实现了typedef

时间:2014-05-06 14:06:27

标签: reflection dart

我有一个MethodMirror,想要检查它正在镜像的方法是否正在实现typedef。这可能吗?如何?

1 个答案:

答案 0 :(得分:1)

我在'dart:mirrors'中找不到预定义的方法来检查方法是否是typedef的实例。

这段代码似乎可行(未经过严格测试)

import 'dart:mirrors';

typedef MyFunc(int a, String b);

main() {
  MethodMirror mm = reflectClass(TestClass).declarations[#testFunc1];
  FunctionTypeMirror tdm =(reflectType(MyFunc) as TypedefMirror).referent;
  print(isOfTypeDef(mm, tdm));

  mm = reflectClass(TestClass).declarations[#testFunc2];
  print(isOfTypeDef(mm, tdm));

  mm = reflectClass(TestClass).declarations[#testFunc3];
  print(isOfTypeDef(mm, tdm));
}


class TestClass {
  void testFunc1(int c, String d) {
    print('$c, $d');
  }

  void testFunc2(var c, var d) {
    print('$c, $d');
  }

  void testFunc3(int e, int f) {
    print('$e, $f');
  }

}

bool isOfTypeDef(MethodMirror mm, FunctionTypeMirror tdm) {

  if((mm.returnType.isAssignableTo(tdm.returnType)) && (mm.parameters.length == tdm.parameters.length)) {
    for(int i = 0; i < mm.parameters.length; i++) {
      if(!mm.parameters[i].type.isAssignableTo(tdm.parameters[i].type)) {
        return false;
      }
    };
  }
  return true;
}

我认为这值得http://dartbug.com

的功能请求
相关问题