简单的情况,int 确实是一个数字。
我正在创建一个通用的 class test<T>
我想测试 T 以查看它是否继承自 number (或在 Dart 的情况下为 num )。
基于对象,Object > num > int
在文档中,所以起初我在想:T is num
如果 T
会起作用是 int
.测试 int is num
显示错误。我必须使用另一个关键字而不是 is
以确定它是否是特定类的 child 。
我试图将它设置为如果 T 是 num 的子级,它将处理比较不同于如果它们是字符串。
对我来说,这可以追溯到 is-a 和 has-a 关系的多态继承设计。
最佳答案
1. 答案
与 int is num
您测试是否是 Type
的实例是 num
的子类型正确报告为 false
.
您要测试的内容很像 5 is num
.
试试看 DartPad .
2. 额外的有用信息
正如评论中所指出的,注意 is
也很有用运行时类型的测试。所以,如果你正在使用一个未初始化的变量——例如,int nonInitializedVar;
—,运行时类型为 Null
, Dart 将返回 false
到 is
测试,因为 Null
不是 num
的子类.
还有一点很重要,如果你想使用is
在运行时的类型(类)上,您需要使用反射,以及诸如 dart:mirrors
之类的包。或 reflectable
或 dart-analyzer 在构建代码生成时执行此操作。
关于generics - 如何根据其父类检查类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137707/