【问题标题】:Error: default constructor is already defined错误:已经定义了默认构造函数
【发布时间】:2014-01-03 02:11:15
【问题描述】:

在 Dart 中,我有以下代码:

class FirstClass {
  FirstClass(a) {

  }
}

class SecondClass extends FirstClass {

}

这会导致SecondClass 出错,因为FirstClass 没有默认构造函数。

但是当我尝试添加一个时。

class FirstClass {
  FirstClass(a) {

  }

  FirstClass() {

  }
}

因为默认构造函数已经在FirstClass 中定义,所以出错。

如果超类根本没有实现任何构造函数,我似乎可以使这项工作而不是错误的唯一方法。我做错了什么?

【问题讨论】:

    标签: inheritance constructor dart


    【解决方案1】:

    在 dart 中,您不能多次使用相同的方法/构造函数名称(即使使用不同的参数)。

    在您的情况下,您可以使用命名构造函数来定义 2 个构造函数:

    class FirstClass {
      FirstClass() {}
      FirstClass.withA(a) {}
    }
    

    或将a 定义为可选并只保留一个构造函数:

    class FirstClass {
      FirstClass([a]) {}
    }
    

    【讨论】:

    • 而原因是 Dart 不是静态类型的,因此不能使用参数类型来区分/重载相同的方法/构造函数名称。
    • @Icn Dart 本质上是静态类型的,如果您将某些内容定义为字符串,您将无法在编译时将任何内容放入字符串之外。动态是一个例外,它不是完全删除方法重载的好理由。它可能仅限于存在实际歧义的情况,就像在 Java 中一样(例如,使用泛型和擦除)。
    【解决方案2】:

    在 dart 中,您不能像 java 等其他语言那样拥有多个构造函数。

    您可以将默认构造函数定义为

    class FirstClass {
      FirstClass() {}
    }
    

    class FirstClass {
      String name;
      int age;
      FirstClass(name, age) {
        this.name = name;
        this.age = age;
      }
    }
    

    你不能在其中包含默认构造函数和参数构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 2023-03-20
      • 2019-12-05
      • 2021-05-06
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多