在抽象接口类中定义的 Dart 工厂函数,没有默认实现

问题描述 投票:0回答:1

是否可以强制一个类使用已定义的函数签名来实现工厂函数?我尝试使用抽象接口类来完成此操作,但问题是,它需要默认实现,这意味着,在新类中实现接口时,不会出现使用默认实现的警告(在本例中为只是一个未实现的错误)。

我在一篇帖子下发现一条评论提到这是不可能的,但我想确定一下,也许知道其背后的原因: flutter/dart 上抽象类中的工厂方法

示例:

abstract class BulkFetchable {
  Map<String, dynamic> toJson(); //this works nicely
  factory BulkFetchable.fromJson(Map<String, dynamic> json); //this is not allowed
  static String get endpoint; //sidenote, this also doesn't work
}

所以工作版本看起来像这样:

abstract class BulkFetchable {
  static String get endpoint => "";
  Map<String, dynamic> toJson();
  factory BulkFetchable.fromJson(Map<String, dynamic> json) {
    throw UnimplementedError();
  }
}

但在这种情况下,实现该接口的类只能强制实现该方法,而无需默认实现。

class A implements BulkFetchable {
  @override
  Map<String, dynamic> toJson() {
    throw UnimplementedError();
  }
  
}

还有其他方法可以实现此功能(强制类实现 JsonSerialized 生成的函数)吗?

dart interface
1个回答
0
投票

不,Dart 不提供强制类实现任何静态成员或构造函数的方法。无论如何,这并不重要,因为您无法以允许您调用这些方法的方式对类进行抽象。

工厂不是实例方法,它不是类接口的一部分,并且它不能是抽象的。它的访问更像是静态成员,它也不能是抽象的。

接口成员可以是抽象的(至少在抽象类中),因为可以在子类中为“该方法”提供实现。当调用接口方法时,它将使用“延迟调度”解析为所调用对象的实际实现。 静态成员和构造函数直接解析。没有其他东西可以提供实现,因为所有引用都

直接

指向静态/构造函数声明。

© www.soinside.com 2019 - 2024. All rights reserved.