我有一些Dart代码,希望在泛型类型的参数是Stream
时实现特殊行为。
代码大致如下:
class MyType<A> {
A doit() {
if (A is Stream) // doesn't work!
else something-else;
}
}
这个可以实现吗?
我有一些Dart代码,希望在泛型类型的参数是Stream
时实现特殊行为。
代码大致如下:
class MyType<A> {
A doit() {
if (A is Stream) // doesn't work!
else something-else;
}
}
这个可以实现吗?
A is Stream
,因为A
实际上是一个Type
实例。但是你可以使用if (A == Stream)
或者使用一个虚拟实例if (new Stream() is A)
。==
是不起作用的,因为 Stream
不等于 Stream<SomeType>
... 我无法创建一个虚拟实例,原因是我需要知道 Stream
的类型参数,而我不知道如何做到这一点。 - RenatoStream.class.isAssignableFrom(A)
(如果Java具有具体化的泛型)。 - Renato通常情况下,您可以使用A == Stream
,但是您在这种情况下说您有Stream<SomeType>
。
如果类型始终为Stream
,则可以使用您拥有的类型参数创建虚拟实例:
class MyType<A> {
A doit() {
final instance = Stream<A>();
if (instance is Stream<SomeType>) { // ... }
else if (instance is Stream<OtherType>) { // ... }
}
这应该可以运行:
<A>[] is List<Stream>