如何将函数参数的默认值设置为扩展抽象 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
构造函数的情况。如果你想在这种情况下使用该类型的实例作为默认参数,你可以 .
假设我有几个 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
构造函数的情况。如果你想在这种情况下使用该类型的实例作为默认参数,你可以