我尝试了解Dart泛型.当我编写自己的自定义泛型类时,我理解泛型如何工作,比如
class Class1<T> {
T func1(T para1, T para2) {
return para1 = para2;
}
}
main() {
var mycl = new Class1<int>();
print(mycl.func1(3, 5));
}
Run Code Online (Sandbox Code Playgroud)
我知道,这是一个非常简单的例子,也许这没有意义,但无论如何,我知道如何使用泛型.
但是现在,我的问题是什么,看看这段代码
StreamSubscription<T> listen(Function void onData(T event), {Function onError, Function void onDone(), bool cancelOnError})
Run Code Online (Sandbox Code Playgroud)
我从HttpServer API复制了这个并且是listen方法.我的问题是,Dart是否支持泛型方法?我在网上搜索Dart泛型方法,但找不到它.
我真的很想了解,如何阅读Dart API文档,但有时候它很难理解.
Dart不支持通用方法.
您在这里看到的是一种属于泛型类的方法.该T
类型的变量来自于类class Stream<T>
.
方法:
StreamSubscription<T> listen(Function void onData(T event), {Function onError, Function void onDone(), bool cancelOnError})
Run Code Online (Sandbox Code Playgroud)
表示在a上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;
}
}
Run Code Online (Sandbox Code Playgroud)
该功能wrap
不是"通用的".它根据当前对象的类型返回一个新类型.返回类型包含T
,但它与调用方法T
的实例相同Gift
.
该函数replace
采用类型的参数T -> T
.该方法不是"通用",它只是取决于的类型的类型T
的Gift
情况下它被称为一个.
也就是说,这些方法不是通用的,因为每次调用它们都可以使用新的Type参数进行参数化.相反,Gift
该类是通用的,并且每个实例都Gift
具有type参数的值.这种实例上的方法可以在其签名中使用该类型参数,但是对于一个Gift
实例,类型总是相同的.A Gift<int>
将wrap
返回一个方法Gift<Gift<int>>
,并且该replace
方法需要一个类型的参数int -> int
.
归档时间: |
|
查看次数: |
1341 次 |
最近记录: |