2014-05-19 113 views
1

我測試應用程序:dart,如何使用反射獲得泛型類型的方法參數?

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 。這甚至有可能嗎?如果我檢查參數的類型屬性爲空。

回答

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

打印

符號( 「INT」)
符號( 「布爾」)

+0

怪異,我想也許飛鏢編輯檢查工具提示中有一個錯誤,當它顯示一個有效值時顯示爲空。謝謝。 – 0xor1

+0

我也看到了。我認爲調試器顯示的是本地字段,你得到的是一個getter的返回值。 getter不一定會返回類似名稱字段的值。從反射返回的類型和值有點奇怪,因爲它們是一些特殊的VM類型,並且與僅在Dart中定義的類不同。 –

相關問題