likes
comments
collection
share

【Flutter】Dart中的类方法和对象操作符

作者站长头像
站长
· 阅读数 4

📝【Flutter】学习养成记,【程序员必备小知识】

📔 今日小知识——【Flutter】Dart中的类方法和对象操作符

1. 写在前面

上篇文章中介绍了Dart中的工厂构造&单例对象&初始化列表,那么现在就继续来学习 Dart 的类方法和对象操作符。

【Flutter】Dart中的类方法和对象操作符

【Flutter】苹果Mac电脑配置flutter开发环境

【Flutter】 Android Studio 安装第三方模拟器—网易MuMu

【Flutter】项目运行报错Failed to find Build Tools revision 29.0.2

【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘

【Flutter】如何新建项目,运行你的第一个 flutter 工程项目

【Flutter】Dart中的var、final 和 const基本使用

【Flutter】Dart数据类型之num

【Flutter】Dart数据类型之String

【Flutter】Dart的数据类型list&Map(数组和字典)

【Flutter】Dart的方法与箭头函数

【Flutter】Dart的方法中的可选参数、方法作为参数传递

【Flutter】Dart中的匿名函数、闭包

【Flutter】Dart中的类和对象

【Flutter】Dart中的构造函数

【Flutter】Dart的工厂构造方法&单例对象&初始化列表

2. 类方法

我们在学习 OC 的时候,有实例方法和类方法,OC 的类方法以加号“+”开头,只能用类名调用,对象不能调用,那么 dart 中的类方法该怎么表示呢?

class StaticClass {
  // 静态属性
  static String name = "reno";
  int height = 180;
  int count = 0;

  //静态方法
  static setName(String name1){
    name = name1;
    return name;
  }
  //实例方法
  int sum(int a) {
  return a + count + height;//实例方法可以访问,非静态成员和静态成员
  }

实例方法可以访问,非静态成员和静态成员,对象方法在 dart 中就是静态方法,在静态方法中不可以访问静态成员属性,也就是实例成员,否则会报错的。

【Flutter】Dart中的类方法和对象操作符

具体的报错信息,可以查看Dart Analysis,如下:

【Flutter】Dart中的类方法和对象操作符

报错❎:error: Instance members can't be accessed from a static method

错误:无法从静态方法访问实例成员。

那为什么静态方法不能访问实例成员呢?

仔细想一想,静态方法是通过类名调用的,你类都没有哪里来的实例啊,对吧!所以就不让你访问;但是实例方法的调用,实例肯定是存在的,那么访问实例对象就肯定是可以的。

类方法的调用如下

直接类名调用类方法和静态的属性。

【Flutter】Dart中的类方法和对象操作符

  • 常量的定义
 static const int id = 30061111111888888;

常量就是在常量区,常量只有一份就必须用static来修饰。

  • 对象操作符
var s;
  s = StaticClass();
  print(StaticClass.name);
  s = null;
  print(s?.sum(10));

这里使用是防止出错,因为 sdynamic类型,有可能为空的情况,加就是说可以为空。

  • 对象符合 as

下面这种情况,s是对象类型,但不知道具体类型,所以调用 sum方法报错,那么就需要进行类型的转换了。

【Flutter】Dart中的类方法和对象操作符

类型的转换可以使用 as,这是 Swift 一样的意思,如下:

【Flutter】Dart中的类方法和对象操作符

哪里需要类型的转换,就在哪里转换。

  • 对象符合 is

还有一种就是 if判断的形式,判断是否是某一种类型

void main() {
  var s = Object();
  s = StaticClass();
  // print((s as StaticClass).sum(10));
  if (s is StaticClass) {
   print(s.sum(10));
  }
}

还有一种对象的操作符点点(..),这个就让人很出乎预料了。

【Flutter】Dart中的类方法和对象操作符

打印的居然不是方法调用的结果,而是返回的是类本身,这其实就是链式编程。

【Flutter】Dart中的类方法和对象操作符

链式编程可以一直点下去,只不过dart这里是两个点,原理都是一样,返回类,继续调用,继续返回继续调用。

3. 写在后面

关注我,更多内容持续输出

🌹 喜欢就点个赞吧👍🌹

🌹 觉得有收获的,可以来一波 收藏+关注,以免你下次找不到我😁🌹

🌹欢迎大家留言交流,批评指正,转发请注明出处,谢谢支持!🌹