就像标题所说:如果你有一个存储在变量中的Type,就我所知,没有办法将你的实际对象与这个类型的变量进行比较.我可以完成我正在尝试用镜子做的事情,但我不愿意,如果可能的话.
void example() {
Type myType = String;
String myExample = "Example";
//Syntax error here: The name 'myType' is not a type and cannot be used in an 'is' expression
if (myExample is myType) {
}
}
Run Code Online (Sandbox Code Playgroud)
通常,您无法使用Type对象测试值是否为类型.
类型对象是反射类型,而不是真实类型.它们代表真实类型,但您不能在需要类型的代码中使用它们:作为类型断言,作为泛型类型参数或使用is/as运算符.您必须在这些位置使用类型的名称,而不是恰好包含Type对象的普通变量的名称.
使用镜子的聪明的东西可能会到达那里,但在大多数情况下它可能有点过分(我知道你不需要它).
你可以做的是,不要传递原始的Type对象.您可以改为创建自己的类型抽象,例如:
class MyType<T> {
const MyType();
Type get type => T;
bool isA(Object object) => object is T;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用它来表示类型,而不是Type对象,并执行以下操作:
void main(List<String> args) {
MyType myType = const MyType<String>();
String myExample = "Example";
if(myType.isA(myExample)) {
print('is');
} else {
print('is not');
}
}
Run Code Online (Sandbox Code Playgroud)
这确实需要您的整个程序使用您的类型对象来传递类型,但它也为您提供了对这些对象的大量控制,因此您可以实现所需的功能.
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |