假设我有List
String
这样的话。
var myList = new List<String>();
如何使用镜像判断myList
是List
String
个?{/ p>
我使用typeVariables
的{{1}}进行了尝试,但镜像似乎只是描述了通用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'
实例,其中访问ClassMirror
不会引发originalDeclaration
。
final ClassMirror originalDeclaration
此类型原始声明的镜像。
对于大多数课程,他们是他们自己的原始声明。对于通用 但是,类在原始类之间存在区别 声明,具有未绑定的类型变量和实例化 泛型类,具有绑定类型变量。
答案 0 :(得分:6)
2种可能的方法。
第一种方法是使用is
运算符检查变量的类型,因为它比反射更高效:
var myList = new List<String>();
print(myList is List<int>); // false
print(myList is List<String>); // true
第二种方法是使用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