Dart - 类型声明
2019-11-29 本文已影响0人
LouisXWB
声明概述
虽然Dart是一门强类型语言,但是声明变量时既可以用静态类型
声明,也可以用var
可选类型声明,还有dynamic
类型声明,因为Dart能进行类型推断。
声明种类
静态类型
-
var
可选类型 -
dynamic
动态类型 -
Object
基类声明
分类说明
1、静态类型
声明变量的时候,使用明确的数据类型:
String name = "Jay";
int number = 123;
2、var
可选类型
使用 var
来声明变量,不需要指定变量的明确类型,因为 Dart 会自动推断其数据类型,所以可以使用 var
来定义任何的变量:
var content = 'Dart Languge';
var switchOn = false;
var current = 123
为什么能用var
定义所有的变量?
原因是var 并不是用来直接存储值的,而是存储的值的对象的引用,例如:var content = 'Dart' 这句,是名字为 content 的 var 变量存储了值为 'Dart' 的 String 对象的引用,所以 var 才能定义任何变量。
3、dynamic
动态类型
dynamic
的意思是数据类型是动态可变的,也可以定义为任何变量,但是和 var
不同的是,var
一旦赋值后,就不能改变数据类型了:
dynamic example = 'example';
example = 1;//✅ 这个使用方法正确,因为 dynamic 的类型是动态可变的
var content = 'Dart 语法';
content = 1; //❌ 错误的使用方法,content为String,不能赋值数字类型
4、 Object
基类声明
Dart 里所有东西都是对象,是因为 Dart 的所有东西都继承自 Object,因此 Object 可以定义任何变量,而且赋值后,类型也可以更改:
Object index = 100;
index = 'string';//✅ 因为 'String' 也是 Object
疑问:dynamic
和Object
类型到底有什么区别?
首先:请不要滥用 dynamic,一般情况下都可以用 Object 代替 dynamic;
其次:dynamic
是有应用场景的,当变量没法用 Dart 的类型来表示时,比如 Native 和 Flutter 交互,从 Native 传来的数据并不能Object
能声明的,所以你会看到 PlatformChannel 里有很多地方使用到了 dynamic。