【发布时间】:2020-07-16 05:48:00
【问题描述】:
我在从抽象类覆盖泛型方法时遇到问题。
这是我的抽象类:
abstract class A {
String getData<Type>(Type key);
}
当我创建一个类 (B) 来实现类 (A) 时,如下所示:
class B implements A {
@override
String getData<String>(String key) { //Error <= B.getData' ('String Function<String>(String)') isn't a valid override of 'A.getData' ('String Function<Type>(Type)')
return "";
}
}
在 (getData) 方法中显示以下编译错误:
'B.getData' ('String Function(String)') 不是 'A.getData' ('String Function(Type)') 的有效覆盖。飞镖(无效覆盖)
在return语句中出现这个错误:
无法从方法“getData”返回“String”类型的值,因为它的返回类型为“String”。
当泛型类型类似于返回类型时,为什么我会收到与覆盖相关的错误,这让我感到困惑。就像我用 getData<int>(int key) 而不是 getData<String>(String key) 创建另一个类 (C) 时,一切都按预期工作:
class C implements A {
@override
String getData<int>(int key) {
return "";
}
}
如果我删除了如下所示的返回类型,那么对于类 (B),一切都会按预期工作:
class B implements A {
@override
getData<String>(String key) {
return "";
}
}
这是 Dart 设计中的一个问题,所以我可以意识到它,因为这种行为在 c# 语言中不存在?
DartPad 链接: https://dartpad.dev/ebc7e6361d0cf1c6afad2f52ab8ebcaa
【问题讨论】:
-
这是一个非常有趣的。我强烈建议您在 GitHub 上的 dart lang 存储库中分享它:github.com/dart-lang/language
-
你能用 DartPad 完整代码更新问题吗?就像这里显示的一样:github.com/dart-lang/sdk/issues/40719
标签: flutter dart generic-method