我有一个通用函数。我试图返回一个基于类型T
的值,但是,我的函数似乎从来没有匹配任何类型(见下面的代码):
int _getCollection<T>() {
print(T); // the actual type
print(T is ClockData); // ClockData is a class I created
// always returns false when passing _getCollection<ClockData>()
if (T is ClockData) {
return 1;
} else if (T is UserData) {
return 2;
} else {
throw Exception();
}
}
字符串
2条答案
按热度按时间yeotifhr1#
is
操作符将检查左操作数是否是右操作数的示例。T是类型参数,而不是ClockData
的示例。你可以使用==
运算符来比较:字符串
请不要检查身份,并且不支持子类型。如果你需要支持类型继承(将
ClockData
的子类作为T
传递),你可以使用这样的技巧:型
wooyq4lh2#
T
的类类型实际上是Type
。它的值是ClockData。is
检查Runtimetype,T的运行时类型为Type
。所以T不是ClockData。正如@fsw提到的,==是更好的方法。