Dart:如何为模型对象定义一个抽象 class,它有一个将它自己的类型作为参数的函数

Dart: How to define an abstract class for Model Objects which has a function that takes it's own type as a parameter

我在 Dart 中遇到以下问题:

我想定义一个具有某些功能的抽象 class 模型对象。其中就是函数isSame

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

现在我定义 class 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)[=14= 的有效覆盖]

我通过将 ModelObjects 设为通用

设法回避了这个问题
abstract class ModelObject<T>{
    bool isSame(T object);}

但这与其说是解决方案,不如说是作弊。

现在我的问题是:是否有更优雅的方法来解决这个问题,或者抽象 class在这种情况下只是错误的方法?

我相信您可以使用 covariant 关键字:

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