在 Dart 中存在两种类型。
- 运行时类型
- 静态类型
这是Dart 语言规范中的证明:
null的静态类型是底部。
- 运行时类型
null
是Null
- 静态类型
null
是bottom
这意味着 Dart 中的对象可以有两种类型。
一种调用的真实类型static
和一种virtual
调用的类型runtime
。
也就是说,runtime type ofnull
不是 abottom
而是常规 class Null
。
class Null {
factory Null._uninstantiable() {
throw new UnsupportedError('class Null cannot be instantiated');
}
/** Returns the string `"null"`. */
String toString() => "null";
}
但同时这种常规运行时类型的Null
值可以分配给任何其他类型,因为真实(静态)类型null
是一种bottom
类型。
在 Dart 中如何称呼这种技术?
类型替换或不同的东西?
附言
这个问题是关于静态类型的值,而不是关于使用类型注释声明的变量的静态类型。
这是因为 thenull
不是变量,而是value
带有static type
of bottom
。
附言
非常奇怪的案例(至少对我来说)。
void main() {
Null _null;
String s = _null;
}
我收到警告:
A value of type 'Null' cannot be assigned to a variable of type 'String'
这是非常正确的。但同时这也有效。
类型替换(静态和运行时)的奇怪事物。