尝鲜 Dart 2.7 最新语法之泛型强化:声明处型变

Posted 熊喵先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝鲜 Dart 2.7 最新语法之泛型强化:声明处型变相关的知识,希望对你有一定的参考价值。

这篇将带领大家探讨一个有意义的东西——泛型型变,可能有点深奥,但是确实是一个很重要的语法点。有关 Dart 泛型的知识,如果对 Dart 泛型没有深入了解过,强烈建议先把该专栏的第 11 篇内容学习下。

如果你有过 Kotlin、C#、Java 的开发经验,对泛型协变、逆变、不变或许不陌生。如果你仅仅熟悉目前 Dart 的泛型,也许你会有点陌生,因为在目前 Dart 版本中默认都是泛型协变的。

默认都是泛型协变,用起来简单方便,但是也会带来一个不安全的问题,那就是把一些错误抛到运行时而不是编译时。为了解决这个不安全的问题,Dart 开发团队提出和 Kotlin、C# 语言一样语法特性,那就是声明点型变(目前还在 experiemental 中)。

什么是声明点型变?什么是协变、逆变、不变?本篇文章将一一为你解答。

1. 什么是子类型

子类型可能对于一些小伙伴来说是个新名字,其实不然,如果有学习之前第 11 篇文章泛型知识应该不陌生。那么这里先来复习一下子类型的概念。

首先给出一个数学归纳公式:

如果 G 是一个有 n 个类型参数的泛型类,而 A[i] 是 B[i] 的子类型且属于 1..n 的范围,那么可表示为 G<A[1],…,A[n]> * G<B[1],…,B[n]> 的子类型,其中 A * B 可表示 A 是 B 的子类型。

我们一般说会对“子类”熟悉,也就是常说的派生类,该类一般会继承它的父类(也叫基类)。例如:

class Dog e

以上是关于尝鲜 Dart 2.7 最新语法之泛型强化:声明处型变的主要内容,如果未能解决你的问题,请参考以下文章

尝鲜 Dart 2.7 最新语法之扩展方法

尝鲜 Dart 2.7 最新语法之扩展方法

尝鲜 Dart 2.7 最新语法之可空与非空类型

尝鲜 Dart 2.7 最新语法之可空与非空类型

C#高级语法之泛型泛型约束,类型安全逆变和协变(思想原理)

Java之泛型