我如何根据其父 class 检查类型?

How do i check a type against its parent class?

简单的情况下,int 确实是一个数字。

我正在创建一个通用的 class test<T>

我想测试 T 看它是否继承自 number(或 Dart 中的 num)。

基于文档中的对象,Object > num > int,所以一开始我在想:如果 TintT is num 会起作用。测试 int is num 显示错误。我必须使用另一个关键字而不是 is 来确定它是否是特定 class.

的子项

我正在尝试将其设置为如果 T 是 num 的子元素,它将以不同于处理字符串的方式处理比较。

对我来说,这可以追溯到 is-ahas-a 关系的多态继承设计。

1。答案

使用 int is num 测试 Type 的实例是否是 num 的子类型,它被正确报告为 false

你想测试的是 5 is num.

DartPad 试试。

2。额外的有用信息

如评论中所述,注意 is 测试运行时类型也很有用。所以,如果你正在使用一个未初始化的变量——例如,int nonInitializedVar;——运行时类型为 Null,Dart 将 return falseis 测试,因为 Null 不是 num.

的子类

另一个重点是,如果你想在运行时对类型(类)使用is,你将需要使用反射,例如dart:mirrorsreflectable 或 dart-analyzer 在代码生成的构建时执行此操作。