gpt4 book ai didi

generics - 对泛型感到困惑

转载 作者:行者123 更新时间:2023-12-02 21:46:45 26 4
gpt4 key购买 nike

我尝试理解 Dart 泛型。当我编写自己的自定义泛型类时,我就会了解泛型的工作原理,例如

class Class1<T> {

T func1(T para1, T para2) {
return para1 = para2;
}
}

main() {
var mycl = new Class1<int>();
print(mycl.func1(3, 5));
}

我知道,这是一个非常简单的例子,也许这没有意义,但无论如何,我知道如何使用泛型。

但是现在,我的问题是什么,看看这段代码

StreamSubscription<T> listen(Function void onData(T event), {Function onError, Function void onDone(), bool cancelOnError}) 

我从 HttpServer API 复制了这个,它是监听方法。我的问题是,Dart 支持泛型方法吗?我在网上搜索有关 Dart 泛型方法的信息,但找不到它。

我真的很想理解,如何阅读 Dart API 文档,但有时很难理解。

最佳答案

Dart 不支持泛型方法。

您在这里看到的是一个属于泛型类的方法。 T类型变量来自类 class Stream<T> .

方法:

StreamSubscription<T> listen(Function void onData(T event), {Function onError, Function void onDone(), bool cancelOnError})

表示在Stream<int>上,listen方法返回 StreamSubscription<int> ,它期望 onData函数需要 int论据。

示例:

class Gift<T> {
T _content;
Gift(T content) : _content = _content;
Gift<Gift<T>> wrap() => new Gift<Gift<T>>(this);
T unwrap() => _content;
T replace(T replacement(T current)) {
var old = _content;
_content = replacement(old);
return old;
}
}

函数wrap不是“通用”。它根据当前对象的类型返回一个新类型。返回类型包含 T ,但都是一样的T作为 Gift 的实例该方法被调用。

函数replace接受 T -> T 类型的参数。该方法不是“通用”的,它只是有一个依赖于 T 类型的类型。在 Gift例如它被称为一。

也就是说,这些方法不是通用的,因为每次调用它们时都可以使用新的 Type 参数对其进行参数化。相反,Gift类是通用的,Gift 的每个实例有一个类型参数的值。此类实例上的方法可以在其签名中使用该类型参数,但对于 Gift例如,类型始终相同。一个Gift<int>将有一个wrap方法返回 Gift<Gift<int>> ,以及 replace方法需要 int -> int 类型的参数.

关于generics - 对泛型感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com