如何在dart中检查一个类型是否是另一个类型的子类型

mspsb9vt  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(270)

最近,我发现自己遇到了一种情况,我想检查一种类型是否是另一种类型的子类型,这就是我所尝试的

abstract class Record{}
 class TimeRecord extends Record{}
 
 void test(){
   print(TimeRecord is Record); // return false but why ??
 }
vyu0f0g1

vyu0f0g11#

检查一个类型是否是另一个类型的子类型只有在至少有一个类型是类型 * 变量 * 时才有意义。(否则,您可以查看源代码并将常量truefalse写入代码)。
有一种方法可以检查一个类型是否是另一个类型的子类型,它确实使用了is操作符,但是你需要有一个 instance 作为第一个操作数,一个type作为第二个操作数。你不能只创建一个未知类型的示例,所以我们依赖于Dart的协变泛型:

bool isSubtype<S, T>() => <S>[] is List<T>;

(You可以使用任何泛型类,甚至可以创建自己的类,而不用使用List。它所需要的只是一种创建对象的方法。)
然后你可以写:

print(isSubtype<TimeRecord, Record>()); // true!
q7solyqu

q7solyqu2#

is关键字用于检查对象示例是否是T类型的对象,而不是is类型的对象:

abstract class Record{}
class TimeRecord extends Record{}
 
void test(){
  print(TimeRecord() is Record); // returns true!
}
zsbz8rwp

zsbz8rwp3#

你可以试试这个

abstract class Record{}
 class TimeRecord extends Record{}
 
 void test(){
   const TimeRecord? t = null;
   print(t is Record?); // return true.
 }

相关问题