如何在Dart中检查对象是否为Null?附Java对比示例
在Dart中检查对象是否为Null的方法
首先你提供的Dart代码存在编译错误:Student类只定义了带参数的构造函数,直接调用Student student2 = new Student();会报错,因为没有对应的无参构造。我们先修正这个问题,再讲解空值检查的具体实现。
1. 修正Student类(添加无参构造)
先给Student类补充无参构造,或者给参数设置默认值,这样才能创建无参实例:
class Student { String name; num age; // 带参构造 Student(this.name, this.age); // 无参构造,给属性设置默认值 Student.empty() : name = '', age = 0; }
2. 基础空值检查:!= null
你写的if(student2 != null)本身就是Dart中合法的空值检查方式,但要注意变量的可空类型声明:
- 在Dart 2.12+的空安全模式下,默认类型是非空的(比如
Student student2),此时student2不可能为null,检查!= null其实是冗余的,但语法上允许。 - 如果变量可能为null,需要声明为可空类型(
Student?),此时!= null检查才有意义。
完整示例代码
void main() { // 创建非空对象 Student student1 = Student("Andrew", 21); Student student2 = Student.empty(); // 对非空对象做null检查(语法合法但冗余) if (student2 != null) { print(student2.name); } // 声明可空类型变量,默认值为null Student? student3; // 检查是否为null,只有非空时才执行内部逻辑 if (student3 != null) { print(student3.name); } }
3. 空安全下的便捷语法糖
除了基础的!= null判断,Dart空安全还提供了更简洁的语法处理空值:
?.空安全访问符:对象不为null时才调用属性/方法,否则返回null,无需写if判断:print(student3?.name); // student3为null时输出null,不会报错??空合并运算符:对象为null时返回指定的默认值:print(student3?.name ?? '未知名称'); // student3为null时输出"未知名称"!断言运算符:确定对象一定不为null时使用,强制转为非空类型,但如果对象实际为null会抛出异常,需谨慎使用:Student student4 = student3!; // 若student3为null,会抛出NullPointerException
内容的提问来源于stack exchange,提问作者SagitSri
相关产品推荐
相关产品推荐

