示例:
class Animal {
Dog dog;
}
class Dog{
String name;
}
运算符“!”:
如果允许它为 null 并允许它抛出异常。
main(){
Animal animal = Animal();
print(animal.dog!.name); // throw exception dog is null
}
运算符“?”
如果你想要,如果当前参数为空,它什么也不做
main(){
Animal animal = Animal();
print(animal.dog?.name); // output emplty
}
如果当前值为null,可以给参数一个替换值
main(){
Animal animal = Animal();
print(animal.dog?.name ?? "The kiki"); // output "The kiki"
}
要求的函数不为空
fun getName(String name){
print(name);
}
main(){
String? name = null;
getName(name); // throw an exception because the required the name argument is not null
}
函数允许null
fun getName(String? name){
print(name);
}
main(){
String? name = null;
getName(name); // output null
}
构造函数中的空值安全
使用必需的运算符
class Animal {
String? name;
String age;
Animal({this.name,required this.age}); // The age argument not allowed to be null so you must add the required operator first
}
或使用位置参数构造函数
class Animal {
String? name;
String age;
Animal(this.age, {this.name}); // age is positional argument
}
或使用默认值构造函数
class Animal {
String? name;
String age;
Animal({this.name, this.age = "18" }); // age is positional argument
}