如果通用类型的参数是Stream
,我有一些Dart代码要在其中实现特殊行为。
是这样的:
class MyType<A> {
A doit() {
if (A is Stream) // doesn't work!
else something-else;
}
}
这可能吗?
答案 0 :(得分:1)
您不能使用A is Stream
,因为A
实际上是一个Type
实例。但是,您可以使用if (A == Stream)
或虚拟实例if (new Stream() is A)
。
答案 1 :(得分:0)
要检查类型参数是否为特定类型,可以使用bool isTypeOf<ThisType, OfType>()
包中的type_helper
函数。如果此类型相同或为其他子类型,则返回true
,否则返回false
。
import 'dart:async';
import 'package:type_helper/type_helper.dart';
void main() {
if (isTypeOf<B<int>, A<num>>()) {
print('B<int> is type of A<num>');
}
if (!isTypeOf<B<int>, A<double>>()) {
print('B<int> is not a type of A<double>');
}
if (isTypeOf<String, Comparable<String>>()) {
print('String is type of Comparable<String>');
}
var b = B<Stream<int>>();
b.doIt();
}
class A<T> {
//
}
class B<T> extends A<T> {
void doIt() {
if (isTypeOf<T, Stream>()) {
print('($T): T is type of Stream');
}
if (isTypeOf<T, Stream<int>>()) {
print('($T): T is type of Stream<int>');
}
}
}
结果:
B<int> is type of A<num>
B<int> is not a type of A<double>
String is type of Comparable<String>
(Stream<int>): T is type of Stream
(Stream<int>): T is type of Stream<int>
答案 2 :(得分:0)
您通常可以使用A == Stream
,但您说的是Stream<SomeType>
。
如果type始终为Stream
,则可以使用具有的type参数创建虚拟实例:
class MyType<A> {
A doit() {
final instance = Stream<A>();
if (instance is Stream<SomeType>) { // ... }
else if (instance is Stream<OtherType>) { // ... }
}