Tho*_* W. 3 generics dart dart-mirrors
假设我有一个List的String这样的.
var myList = new List<String>();
Run Code Online (Sandbox Code Playgroud)
我怎样才能弄清楚,myList是List的String使用镜子S'
我尝试使用它typeVariables,ClassMirror但镜像似乎只是描述了泛List类.
InstanceMirror im = reflect(myList); // InstanceMirror on instance of 'List'
ClassMirror cm = im.type; // ClassMirror on 'List'
print(cm.typeVariables['E']) // TypeVariableMirror on 'E'
Run Code Online (Sandbox Code Playgroud)
我也在文档中找到了这个,但我还没有找到一个ClassMirror访问originalDeclaration不会抛出的实例NoSuchMethodError.
最终的ClassMirror originalDeclaration
这种类型的原始声明上的镜像.
对于大多数课程,他们是他们自己的原始声明.但是,对于泛型类,原始类声明(具有未绑定的类型变量)和泛型类(具有绑定类型变量的实例化)之间存在区别.
2种可能的方法.
第一种方法是使用is运算符检查变量的类型,因为它比反射更高效:
var myList = new List<String>();
print(myList is List<int>); // false
print(myList is List<String>); // true
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用ClassMirror.typeArguments:
import 'dart:mirrors';
var myList = new List<String>();
Map typeArguments = reflect(myList).type.typeArguments;
print(typeArguments); // {Symbol("T"): ClassMirror on 'String'}
ClassMirror firstTypeArg = typeArguments[typeArguments.keys.first];
print(firstTypeArg.reflectedType); // String
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1312 次 |
| 最近记录: |