首页 > 解决方案 > 在 dart 中覆盖类变量时出错

问题描述

我一直在学习飞镖,但在下面的代码中遇到了一些问题,其中我使用默认构造函数来避免在类中采用默认值作为一种做法,但编译器说必须初始化类变量,因为这些值不能可以为空。如果我的默认构造函数在初始化 main 中的类对象时分配这些值,是否真的需要分配类属性?请帮助解决这个问题。

      class Person
      {
       String name;
       int age; 

        Person(String st_name, int age)
         {
          name = st_name;
          this.age = age;
         }
       }

   void main()
   {
    Person obj_p1 = new Person('Ralph',25);
    var obj_p2 = Person('Mark', 26);
    
    print(obj_p1.name);
    print(obj_p1.age);
    
    print(obj_p2.name);
    print(obj_p2.age);
    }

标签: flutterdart

解决方案


编辑

要将其与命名参数一起使用,请在构造函数中为参数添加前缀,required如下所示:

class Person {
  final String name;
  final int age;

  Person({required this.name, required this.age});
}

为了解决这个问题,我在你的变量前面加上late关键字,通知编译器你稍后将初始化这个变量(也就是在构造函数中)。

class Person {
  late String name;
  late int age;

  Person(String st_name, int age) {
    name = st_name;
    this.age = age;
  }
}

void main() {
  Person obj_p1 = new Person('Ralph', 25);
  var obj_p2 = Person('Mark', 26);

  print(obj_p1.name);
  print(obj_p1.age);

  print(obj_p2.name);
  print(obj_p2.age);
}

但是,在 Dart 中,这不是为类初始化变量的推荐方法。正确的方法如下:

class Person {
  final String name;
  final int age;

  Person(this.name, this.age);
}

上面的代码本质上是第一个块中的代码。关键字只是告诉编译器这个final变量一旦传入构造函数就不能改变。


推荐阅读