如何将函数参数的默认值设置为扩展抽象 class 的 class 的对象?

How to set a function parameter's default value as an object of a class which extends an abstract class?

假设我有几个 class 扩展了一个抽象 class。现在我想将默认值传递给函数参数,其中参数的类型是抽象 class。 Dart 需要一个 const 值,而我无法为抽象 class 创建一个 const 构造函数。如何传递摘要的默认值 class?

示例代码如下:

class Main {

  late A objOfA;


  Main({ A nObjOfA = const B() }); // <===== Error here

}

abstract class A {

  abstract String name;
  
  abstract int id;
}

class B extends A {

  @override
  String name = "B";

  @override
  int id = 1;
}

class C extends A {

  @override
  String name = "C";

  @override
  int id = 1;
}

这里,如何在Main的构造函数中传递一个默认值nObjOfA

Dart expects a const value, and I couldn't create a const constructor for an abstract class.

没有规定不能为抽象 class 创建 const 构造函数。 Abstract classes 可以有构造函数;你只是不能直接调用它们来实例化一个抽象 class。以下代码是合法的:

class Main {
  A objOfA;

  Main({this.objOfA = const B()});

}

abstract class A {
  const A();
  
  abstract final String name;

  abstract final int id;
}

class B extends A {
  const B();
  
  @override
  final String name = "B";

  @override
  final int id = 1;
}

class C extends A {
  @override
  String name = "C";

  @override
  int id = 1;
}

请注意,我需要添加 final 限定符,因为 const 对象必须是不可变的。 (不相关,但我还修复了 late 关键字的不当使用。)

一般情况下,会出现无法创建const构造函数的情况。如果你想在这种情况下使用该类型的实例作为默认参数,你可以 .