class 没有默认构造函数

The class does not have a default constructor

GreatTask 上的 Webstorm 错误 The class Task does not have a default constructor,我希望 Task 是 `Task.

的默认构造函数

我期待创建一个 Taskcontract,这样在 Task.run() 之后,列表中的每个成员 chain Task.chain[i]因为它是 Task 的成员而被执行,否则我期望 uncaught error.

我想知道我应该首先纠正什么,代码或Webstorm的配置。

abstract class Task {
  List chain;

  Task(this.chain);

  void run() {
    this.chain.forEach((el) => this.el());
  }
}


class GreatTask extends Task {
  List chain;

 GreatTask(this.chain);

  String hi() {
    return 'hi';
  }
}

@Kikerova 说的对,我不知道他为什么删掉了他的好答案。 如果您添加自己的构造函数,则不再创建默认构造函数,您需要显式调用 或超级构造函数。

我假设您不想在子class 中添加(覆盖)List chain; 字段,因为超级class 已经包含它。如果你想初始化 super class 的字段,你不能在构造函数参数列表中使用带有 this.chain 的短格式。

我假设这就是你想要的:

class GreatTask extends Task {

 GreatTask(List chain) : super(chain);

  String hi() {
    return 'hi';
  }
}

"default constructor" 是(技术上)如果您自己不添加任何构造函数时添加的那个。它将是 YourClass(): super();.

术语 "default constructor" 也常用于任何无名称零参数生成构造函数。这就是这里的错误所说的。 因为 GreatTask(this.chain);GreatTask(this.chain): super(); 相同,并且超类 Task 没有供 super() 引用的无名称零参数生成构造函数,所以您会出错。

Günther 的回答通过使 GreatTask 构造函数调用现有的 Task(List list) 构造函数而不是不存在的 Task() 构造函数来解决问题。