dart - 尝试确定变量是否属于某种类型时出现语法错误

标签 dart

正如标题所说:如果您将类型存储在变量中,则据我所知,无法将实际对象与该类型变量进行比较。我也许可以用镜子完成我想要做的事情,但如果可能的话我宁愿不这样做。

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) {

  }
}

最佳答案

您通常无法使用 Type 对象测试值是否属于某种类型。

类型对象是反射类型,而不是真实类型。它们代表真实类型,但您不能在需要类型的代码中使用它们:作为类型断言、作为泛型类型参数或与 is/as 运算符一起使用。您必须在这些地方使用类型的名称,而不是恰好保存 Type 对象的普通变量的名称。

使用镜子的聪明的东西可能会到达那里,但在大多数情况下它可能有点过大(我知道你不想要它)。

您可以做的就是不要传递原始 Type 对象。您可以创建自己的类型抽象,例如:

class MyType<T> {
  const MyType();
  Type get type => T;
  bool isA(Object object) => object is T;
}

然后您可以使用它来表示类型,而不是 Type 对象,并执行以下操作:

void main(List<String> args) {
  MyType myType = const MyType<String>();
  String myExample = "Example";

  if(myType.isA(myExample)) {
    print('is');
  } else {
    print('is not');
  }
}

这确实要求您的整个程序使用类型对象来传递类型,但它也为您提供了对这些对象的大量控制,以便您可以实现所需的功能。

关于dart - 尝试确定变量是否属于某种类型时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528898/

相关文章:

flutter - 下拉小部件,在按下此下拉框时会显示详细信息

flutter - 从Flutter中的另一个屏幕调用Future函数

flutter - 在 GridView 中更改单个小部件的属性

dart - 无法更改 RaisedButton 颜色

android - NoSuchMethodError,迭代器调用为null

dart - pub 服务输出错误,它 "Cannot handle private identifier"

ios - 尝试在 Flutter 中设置 Row 小部件的框约束

json - Flutter如何从JSON HTTP响应中获取特定值

oop - 使用dart进行类映射

types - 是否可以在静态方法中获取类类型?