首页 > 解决方案 > 具有变量类型的“is”语句

问题描述

我想检查一下,如果我的变量 k 有一个称为 T 的类型。我的方法是

int k=1;
Type T=int;
if(k is T) print('same type');

但它不起作用。它有效,如果我写

if(k is int)

但我想更改变量中的类型。

谢谢你的回答

标签: dart

解决方案


你不能Type在 Dart 中使用对象进行类型检查。

Type对象不是类型,它只是表示可以与dart:mirrors反射库一起使用的类型的标记。它真的不能用于其他任何事情。

如果您需要进行类型检查,则需要将类型存储为类型变量,这意味着您需要一些通用的东西,或者将其存储在纯代码中作为闭包。

闭包方法更简单,但可读性较差:

int k = 1;
var typeChecker = (o) => o is int;
if (typeChecker(o)) print("k has the right type");

使用通用辅助类更通用:

class Typer<T> {
  bool isType(Object o) => o is T;
  bool operator >=(Typer other) => other is Typer<T>;
  bool operator <=(Typer other) => other >= this;
}
...

var k = 1;
var type = Typer<int>();
if (type.isType(k)) print("k is integer");

简而言之,不要Type用于任何事情,除非dart:mirrors因为它对其他任何事情都没有真正用处。


推荐阅读