Dart 省道传递通用函数<;T>;(T)似乎需要强制转换,所有其他方式签名不';不匹配
以下面的代码为例,我无法弄清楚如何使泛型类型函数在不进行强制转换的情况下工作,如图所示。我试过的每一种方法都会得到一些变化 无法将参数类型“Null Function(Gift)”分配给 参数类型“动态功能(T)”Dart 省道传递通用函数<;T>;(T)似乎需要强制转换,所有其他方式签名不';不匹配,dart,Dart,以下面的代码为例,我无法弄清楚如何使泛型类型函数在不进行强制转换的情况下工作,如图所示。我试过的每一种方法都会得到一些变化 无法将参数类型“Null Function(Gift)”分配给 参数类型“动态功能(T)” var present=present(礼物(“精美礼物”),(礼物t){ 打印('${(t作为礼物).name}已打开'); }); 或 未为类型“Object”定义getter“name” var present=present(礼物(“精美礼物”),(t){ 打印(“${t.
var present=present(礼物(“精美礼物”),(礼物t){
打印('${(t作为礼物).name}已打开');
});
或
未为类型“Object”定义getter“name”
var present=present(礼物(“精美礼物”),(t){
打印(“${t.name}已打开”);
});
下面是一个使用cast的工作示例
void main() {
var present = Present<Gift>(Gift('Fancy Gift'), <T>(t) {
print('${(t as Gift).name} was opened.');
});
present.open();
}
class Present<T> {
final T _item;
final Function<T>(T t) openedCallback;
T open() {
openedCallback.call(_item);
return _item;
}
Present(this._item, this.openedCallback);
}
class Gift {
final String name;
Gift(this.name);
}
void main(){
var present=礼物(礼物(“精美礼物”),(t){
打印('${(t作为礼物).name}已打开');
});
present.open();
}
课堂出席{
最后的T_项目;
最终功能(T)打开回调;
T open(){
openedCallback.call(_项);
退货项目;
}
出席(此._项,此.打开回调);
}
班级礼物{
最后的字符串名;
礼物(这个名字);
}
在没有强制转换权限的情况下,应该有办法做到这一点。您的类定义没有达到您的目的:
课堂演示{
最后的T_项目;
最终功能(T)打开回调;
...
openedCallback
是单独参数化的;它的T
类型参数是单独的,独立于Present
的参数。不需要参数化openedCallback
,因为您可能想要:
课堂演示{
最后的T_项目;
最终功能(T)打开回调;
...
之后,您可以执行以下操作:
var present=present(礼物(“精美礼物”),(t){
打印(“${t.name}已打开”);
});
请注意,执行
(t){…}
或(t){…}
会适得其反。这会声明一个匿名函数,该函数本身是泛型的,并且其类型参数分别名为t
或Gift
。<
课堂演示{
最后的T_项目;
最终功能(T)打开回调;
...
openedCallback
是单独参数化的;它的T
类型参数是单独的,独立于Present
的参数。不需要参数化openedCallback
,因为您可能想要:
课堂演示{
最后的T_项目;
最终功能(T)打开回调;
...
之后,您可以执行以下操作:
var present=present(礼物(“精美礼物”),(t){
打印(“${t.name}已打开”);
});
请注意,执行(t){…}
或(t){…}
会适得其反。它声明了一个匿名函数,该函数本身是泛型的,并且具有一个分别名为t
或Gift
的类型参数
var present = Present<Gift>(Gift('Fancy Gift'), <Gift>(t) {
print('${t.name} was opened.');
});
void main() {
var present = Present<Gift>(Gift('Fancy Gift'), <T>(t) {
print('${(t as Gift).name} was opened.');
});
present.open();
}
class Present<T> {
final T _item;
final Function<T>(T t) openedCallback;
T open() {
openedCallback.call(_item);
return _item;
}
Present(this._item, this.openedCallback);
}
class Gift {
final String name;
Gift(this.name);
}