- 条件成员访问 ?.
- 类型转换 as
- 类型判断 是否为指定的类型 is is!
- 级联操作符
-
条件成员访问 ?.
原因:在不确定对象是否被实例化之前使用 ?. 避免空指针错误的发生
例如:void main(){ Person person; person.work(); } class Person{ String name; int age; void work(){ print("work..."); } }
由于Person 没有被实例化 导致调用work() 时出现空对象报错
lib/Rectangle.dart: Warning: Interpreting this as package URI, 'package:myflutterdemo/Rectangle.dart'. Unhandled exception: NoSuchMethodError: The method 'work' was called on null. Receiver: null Tried calling: work() #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5) #1 main (package:myflutterdemo/Rectangle.dart:3:10) #2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12) Process finished with exit code 255
解决方案
void main(){ Person person; //加入条件操作符 person?.work(); } class Person{ String name; int age; void work(){ print("work..."); } }
-
类型转换操作符 as
这时类型就变成了dynamic 如何转换成Person 类型那? 使用as
void main(){ var person = new Person(); (person as Person).work(); } class Person{ String name; int age; void work(){ print("work..."); } }
-
is is! 判断是否是什么类型
用于解决直接as导致类型强转错误的问题void main(){ var person; person = ""; if(person is Person){ person.work(); } } class Person{ String name; int age; void work(){ print("work..."); } }
-
级联运算操作符
用于简化类赋值及操作void main(){ var person; person = new Person(); if(person is Person){ //级联运算操作 person..name = "张三" ..age = 20 ..work(); } } class Person{ String name; int age; void work(){ print("work...$name / $age"); } }