首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法生成Dart类对象

无法生成Dart类对象
EN

Stack Overflow用户
提问于 2021-06-27 15:48:33
回答 1查看 312关注 0票数 0

我的密码

代码语言:javascript
复制
class Book {
  String title;
  String author;
  int numOfPages;

  Book(String title, String author, int pages) {
    this.title = title;
    this.author = author;
    this.numOfPages = pages;
  }
}

void main() {
  Book bk = Book("Modern Operating Systems", "S.Tannabeaum", 1250);
  print(bk.title);
}

嘿,我是个飞镖和编程新手。实际上,我想要创建一个类,它的构造函数和其中的三个实例。当我想从这个类中创建一个对象时,我发现了这个错误!

我的代码的错误信息!

  • 我认为我的代码有问题,任何帮助都是值得赞赏的:)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-27 17:00:02

代码中有两个问题。首先,Dart中的构造函数有两个“阶段”,首先初始化对象,然后运行构造函数体,然后将对象返回给构造函数的调用方。

这意味着您首先要创建一个Book对象,而不需要设置这三个变量。是的,您稍后将在构造函数体中设置这些变量,但此时为时已晚。

下一个问题是,如果您没有在Dart中设置变量的值,那么它总是默认为null值。对于Dart 2.12,默认情况下我们得到了非空类型(NNBD),这意味着Dart中的所有类型都不允许值null,除非指定。您可以通过在类型名称之后键入一个null值来指定该?值的有效性。例如,String?允许变量指向String对象或null

在本例中,我们不需要指定可空类型,因为问题主要是需要将变量的初始化从构造函数体移到对象的初始化阶段,如下所示:

代码语言:javascript
复制
class Book {
  String title;
  String author;
  int numOfPages;

  Book(String title, String author, int pages)
      : this.title = title,
        this.author = author,
        this.numOfPages = pages;
}

同样的内容可以重写如下,这也是建议的方法:

代码语言:javascript
复制
class Book {
  String title;
  String author;
  int numOfPages;

  Book(this.title, this.author, this.numOfPages);
}

因为我们在这里直接指的是每个字段,所以我们想要给出一个值。然后,Dart将使用构造函数中的参数自动分配值。

如果构造函数使用了很多参数,那么使用命名参数可能更容易读懂。这里的required关键字意味着我们提供了一个给定的命名参数。如果未指定,则命名参数是可选的(这意味着我们大多数提供默认值或允许null使参数有效):

代码语言:javascript
复制
class Book {
  String title;
  String author;
  int numOfPages;

  Book({
    required this.title,
    required this.author,
    required this.numOfPages,
  });
}

void main() {
  final book = Book(
    title: "Modern Operating Systems",
    author: "S.Tannabeaum",
    numOfPages: 1250,
  );
  
  print(book.title); // Modern Operating Systems
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68152851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档