如何在Dart中检查类型参数是否为特定类型?

3

我有一些Dart代码,希望在泛型类型的参数是Stream时实现特殊行为。

代码大致如下:

class MyType<A> {
    A doit() {
        if (A is Stream) // doesn't work!
        else something-else;
    }
}

这个可以实现吗?


不知道 Dart,但这是同样的问题吗?https://dev59.com/AGsz5IYBdhLWcg3wsaLN 看起来你在问类型 A 是否为 Stream 类型。 - kenny
那是一个不同的问题。我正在询问如何检查类型参数表示的类型,而不是值的类型。 - Renato
3个回答

1
你不能使用A is Stream,因为A实际上是一个Type实例。但是你可以使用if (A == Stream)或者使用一个虚拟实例if (new Stream() is A)

使用 == 是不起作用的,因为 Stream 不等于 Stream<SomeType>... 我无法创建一个虚拟实例,原因是我需要知道 Stream 的类型参数,而我不知道如何做到这一点。 - Renato
我需要的等价于Java的Stream.class.isAssignableFrom(A)(如果Java具有具体化的泛型)。 - Renato

0

通常情况下,您可以使用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>) { // ... }
  }

0

这应该可以运行:

<A>[] is List<Stream>

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接