【发布时间】:2020-06-05 05:41:29
【问题描述】:
鉴于此
extension<T> on List<T> {
List<T> addAtTheEnd(T value) {
return this.addAllAtTheEnd(<T>[value]);
}
List<T> addAllAtTheEnd(List<T> values) {
return [
...this,
...values,
];
}
}
在代码编辑器中,this.addAllAtTheEnd(<T>[value]) 带有下划线,表示:
A value of type 'List<dynamic>' can't be returned from method 'addAtTheEnd' because it has a return type of 'List<T>'.
这对我来说听起来不合逻辑,因为 addAllAtTheEnd 方法没有编译错误,我在调用站点 (addAtTheEnd) 上明确定义了泛型类型,并且我使用 this 来指示什么类型我正在调用该方法。
为什么这不起作用,我怎样才能使它起作用?
【问题讨论】:
-
我不知道为什么
dartanalyzer会抱怨List<dynamic>,但您似乎可以通过将this.addAllAtTheEnd(...)更改为addAllAtTheEnd(...)来解决它。顺便说一句,您可以将List<T>.append用于单个元素,将+=用于附加另一个List。 -
我知道
append函数,我的目标是创建一个最小的可重现示例,但感谢您指出。 -
我会看看它是否在没有
this的情况下工作。我之所以使用this编写它,是因为没有它,智能补全就无法工作。
标签: generics dart extension-methods