generics - 如何根据其父类检查类型?

标签 generics dart generic-programming

简单的情况,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 将返回 falseis测试,因为 Null不是 num 的子类.

还有一点很重要,如果你想使用is在运行时的类型(类)上,您需要使用反射,以及诸如 dart:mirrors 之类的包。或 reflectable或 dart-analyzer 在构建代码生成时执行此操作。

关于generics - 如何根据其父类检查类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137707/

相关文章:

c++ - 转发与不转发传递给包装器的函数

java - 如何在子类对象上调用父类(super class)方法?

java - 如何修复接收对象数组的静态泛型方法

generics - 带有泛型的 typescript 问题 : Cannot read property 'prototype' of undefined

flutter - 'List<dynamic>'类型不是 'List<Complain>'类型的子类型

c++ - 什么是C++运行时概念?

java - 当类具有有界类型参数时使用有界通配符

firebase - Flutter中创建文档后返回新创建的Document ID

ruby-on-rails - 通过JSON进行的嵌套模型验证失败

c++ - C++的value_type可以从iterator_traits扩展到所有类型吗?