美文网首页
Dart的对象操作符

Dart的对象操作符

作者: 见字如晤一 | 来源:发表于2022-02-15 09:52 被阅读0次

Dart中的对象操作符:
? 条件运算符 (了解)
as 类型转换
is 类型判断
.. 级联操作 (连缀) (记住)

1、?(问号)

“?”同kotlin语言的“?.”差不多,主要是用来判空,若改对象为null,则不会继续调用其方法,防止出错:

void main() {
  var obj = null;
  //这里定义的类型,如果是明确类型如:自定义类
  //赋值为null时会提示:
  // A value of type 'Null' can't be assigned to a variable of type "xxx"
  //只有var类型可以赋值为null。
  //运行发现,没有?.时会crash,有?.会打印出null,防止出错,当obj为null时不会继续调用具体方法
  print(obj?.work);
}

2、as 类型转换

as使用时注意,转换只能是子类转换成父类,不能父类as子类。
错误情况:

class Person {
  String name;
  int age;

  Person()
      : name = "小样儿",
        age = 12 {}

  void working() {
    print("Person is working");
  }
}

class WoMan extends Person{
  String work = "";

  void run(){
    print("woman run");
  }
}

void main() {
  var obj = Person();
  //使用as时需要注意:1、只能是对象是子类,通过as转换成父类。不能是obj是父类对象然后as成子类。
  //type 'Person' is not a subtype of type 'WoMan' in type cast
  obj as WoMan;
  obj.working();
}

上述main方法中的as方法会报错:
type 'Person' is not a subtype of type 'WoMan' in type cast
意思是Person类不是WoMan的子类,不能转换。

正确用法是:
void main() {
  var obj = WoMan();
  obj as Person;
  obj.working();
}

打印结果:

Person is working

证明转换成功!!!

3、is 类型判断

is用于判断当前对象是否是对应类型,是的话表达式的值是true,反之为false。

void main() {
  var obj = Person();
  if(obj is Person){
    print("obj is Person");
  }else{
    print("is 错了");
  }
}

4、..级联操作(连缀)

class Person {
  String name;
  int age;

  Person()
      : name = "小样儿",
        age = 12 {}

  void setName(String n) {
    this.name = n;
  }

  void setAge(int age) {
    this.age = age;
  }

  void working() {
    print("Person is working 姓名:$name -- 年龄:$age");
  }
}

void main() {
  var obj = Person();
  //..级联操作符,相当于一直在当前对象上进行调用一连串方法
  //书写时尽量对齐,不对齐也可以,只是看起来不舒服而已。
  obj..setName("张三")
     ..setAge(50)
     ..working();
}


打印结果:
Person is working 姓名:张三 -- 年龄:50

连缀也可以写成一排:

obj..setName("张三")..setAge(50)..working();

相关文章

  • Dart的对象操作符

    Dart中的对象操作符:? 条件运算符 (了解)as 类型转换is 类型判断.. 级联操...

  • dart(二)--函数、操作符、异常

    函数 dart中万物皆对象,函数也是一个对象 闭包 操作符 级联调用 .. 异常 try catch,throw,...

  • Dart语言超级父类之Object

    Object* 构造方法* 属性* 方法* 操作符* 代码 Object Dart语言和Java一样,都是面向对象...

  • Dart中的对象操作符

    ? 条件运算符 as 类型转换 is类型判断 .. 级联操作(连缀) Person ...

  • dart语法7-泛型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法8-库

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法10-生成器

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法9-异步

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法11

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法2-内置类型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

网友评论

      本文标题:Dart的对象操作符

      本文链接:https://www.haomeiwen.com/subject/otqhlrtx.html