美文网首页Dart
Dart - 类(静态、泛型)

Dart - 类(静态、泛型)

作者: LouisXWB | 来源:发表于2020-01-01 22:29 被阅读0次

静态

使用关键字 static 可以声明类变量或类方法。

静态变量

静态变量(即类变量)常用于声明类范围内所属的状态变量和常量:

class Queue {
  static const initialCapacity = 16;
  // ···
}

void main() {
  assert(Queue.initialCapacity == 16);
}

备忘📝:静态变量在其首次被使用的时候才被初始化。

静态方法

静态方法(即类方法)不能被一个类的实例访问,同样地,静态方法内也不可以使用this

class Point {
  num x, y;
  Point(this.x, this.y);

  static num distanceBetween(Point a, Point b) {
    var dx = a.x - b.x;
    var dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
}

void main() {
  var a = Point(2, 2);
  var b = Point(4, 4);
  var distance = Point.distanceBetween(a, b);
  assert(2.8 < distance && distance < 2.9);
  print(distance);
}

可以将静态方法作为编译时常量。例如,你可以将静态方法作为一个参数传递给一个常量构造函数。

泛型

为什么使用泛型?

泛型常用于需要要求类型安全的情况,但是它也会对代码运行有好处:

  • 适当地指定泛型可以更好地帮助代码生成。
  • 使用泛型可以减少代码重复。
  • 提高代码的可维护性和协同开发。

使用集合字面量

List、Set 以及 Map 字面量也可以是参数化的。定义参数化的 List 只需在中括号前添加 <type>;定义参数化的 Map 只需要在大括号前添加 <keyType, valueType>:

var names = <String>['小芸', '小芳', '小民'];
var uniqueNames = <String>{'小芸', '小芳', '小民'};
var pages = <String, String>{
  'index.html': '主页',
  'robots.txt': '网页机器人提示',
  'humans.txt': '我们是人类,不是机器'
};

使用类型参数化的构造函数

在调用构造方法时也可以使用泛型,只需在类名后用尖括号(<...>)将一个或多个类型包裹即可:

var nameSet = Set<String>.from(names);

下面代码创建了一个键为 Int 类型,值为 View 类型的 Map 对象:

var views = Map<int, View>();

备忘📝: 与 Java 不同的是,Java 中的泛型是类型 擦除 的,这意味着泛型类型会在运行时被移除。在 Java 中你可以判断对象是否为 List 但不可以判断对象是否为 List<String>。

使用泛型方法

起初 Dart 只支持在类的声明时指定泛型,现在同样也可以在方法上使用泛型,称之为 泛型方法

T first<T>(List<T> ts) {
  // 处理一些初始化工作或错误检测……
  T tmp = ts[0];
  // 处理一些额外的检查……
  return tmp;
}

方法 first<T> 的泛型 T 可以在如下地方使用:

  • 函数的返回值类型 (T)。

  • 参数的类型 (List<T>)。

  • 局部变量的类型 (T tmp)。

你可以查阅使用泛型函数获取更多关于泛型的信息。

相关文章

  • Dart - 类(静态、泛型)

    静态 使用关键字 static 可以声明类变量或类方法。 静态变量 静态变量(即类变量)常用于声明类范围内所属的状...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • JDK5的新特性

    可变参数 格式: 注意 静态导入 泛型 泛型类: 泛型方法: 泛型接口: 增强for 在 集合_List 中有...

  • Dart语言简介 2019-03-18

    标签(空格分隔): Dart Flutter Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型...

  • Dart 泛型 泛型类 泛型接口

    视频地址https://www.bilibili.com/video/av52490605?p=13 泛型就是解决...

  • Java-阶段小结笔记(五)--泛型方法及泛型类

    1.类中方法的泛型与类的泛型的关系 2.静态方法在类加载的时候就调用,必须声明自己的泛型

  • Dart 泛型 泛型方法 泛型类 泛型接口

    通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验) 1.定义一个泛型,泛型方法...

  • 泛型

    基本 泛型class中的静态成员 只有泛型类型相同的类,才会共享静态成员。因为JIT会将其解释为两个不同的类,虽然...

  • dart语法速览

    dart语法速览 类与构造 泛型 Factory与私有 生成器 类型别名 异步

网友评论

    本文标题:Dart - 类(静态、泛型)

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