2014-05-19 3 views
1

У меня есть тестовое приложение:дротик, как получить общий тип параметра метода, используя отражение?

import 'dart:mirrors'; 

class A { 
    void eventHandlerInt(List<int> x){} 
    void eventHandlerBool(List<bool> x){} 
} 

void testMirrors(aFunction){ 
    ClosureMirror mir = reflect(aFunction); 
    var param = mir.function.parameters.first; 
    //How to get the Type T of List<T> of the first param? 
} 

void main() { 
    var a = new A(); 
    testMirrors(a.eventHandlerInt); 
    testMirrors(a.eventHandlerBool); 
} 

Я хотел бы быть в состоянии выяснить, что общий тип первого параметра метода перешедшего в testMirrors, так что в приведенном выше примере это будет int тогда bool , Возможно ли это? если я проверяю параметр, свойство type равно null.

ответ

3
List<TypeMirror> types = mir.function.parameters.first.type.typeArguments; 
param.forEach((e) => print(e.simpleName)); 

печатает

Символ ("ИНТ")
Символ ("BOOL")

+0

странно, я думаю, может быть наконечник дротика-редакторы осмотр инструмента есть ошибка в нем, что показывает null, когда он должен показывать действительное значение. Благодарю. – 0xor1

+0

Я тоже это видел. Я думаю, что показывает отладчик - это локальное поле, и то, что вы получаете, является возвращаемым значением получателя. Геттер не обязательно возвращает значение аналогично названного поля. Типы и значения, возвращаемые из отражения, немного странны, потому что они являются некоторыми специальными типами VM и отличаются от классов, определенных только в Дарте. –