Дарт: Как определить абстрактный класс для объектов модели, который имеет функцию, которая принимает свой собственный тип в качестве параметра - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть следующая проблема в Dart:

Я хочу определить абстрактный класс ModelObjects, который имеет некоторые функции. Среди них есть функция isSame

abstract class ModelObject{
   bool isSame(ModelObject object);
   ...
}

. Теперь я определяю класс PlayerModel следующим образом:

class PlayerModel extends ModelObject{
     bool isSame(PlayerModel player){
       //some code that checks if the objects are the same
     }

, что приводит dart к ошибке компиляции:

PlayerModel.isSame '(' bool Function (PlayerModel) ') не является допустимым переопределением' ModelObject.isSame '(' bool Function (ModelObject) '). Dart (invalid_override)

Мне удалось чтобы обойти эту проблему, сделав ModelObjects обобщенным c

abstract class ModelObject<T>{
    bool isSame(T object);}

Но это скорее обман, чем решение.

Теперь мой вопрос: есть ли более элегантный способ Чтобы решить эту проблему или абстрактные классы просто неправильный подход в этом случае?

1 Ответ

0 голосов
/ 29 апреля 2020

Я считаю, что вы можете использовать ключевое слово covariant:

class PlayerModel extends ModelObject {
  @override
  bool isSame(covariant PlayerModel player) {
    //some code that checks if the objects are the same
  }
...