У меня есть проблема переопределить метод generi c из абстрактного класса.
Вот мой абстрактный класс:
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) '). dart (invalid_override)
И эта ошибка в операторе возврата:
Значение типа 'String не может быть возвращено из метода' getData ', поскольку оно имеет возвращаемый тип 'String'.
Меня смущает, почему я получаю эту ошибку, связанную с переопределением, когда тип generi c похож на тип возвращаемого значения. например, когда я создал другой класс (C) с getData<int>(int key)
вместо getData<String>(String key)
, все работает как положено:
class C implements A {
@override
String getData<int>(int key) {
return "";
}
}
Также с классом (B), если я удалил возвращаемый тип, как показано ниже все будет работать как положено:
class B implements A {
@override
getData<String>(String key) {
return "";
}
}
Это проблема в дизайне дротиков, поэтому я могу знать об этом, потому что такого поведения нет, например, в c# языке?
DartPad Link: https://dartpad.dev/ebc7e6361d0cf1c6afad2f52ab8ebcaa