6、dynamic&Object
dynamic: [daɪˈnæmɪk] 动态的;动力的;动力学的;有活力的
基础
在Dart里面,一切皆对象,而且这些对象的父类都是Object。 当没有明确类型的时候,编译的时候回根据值明确类型
var name1 = "abc";
Object name2 = "def";
dynamic name3 = "hij";
以上写法都没有问题,但是Dart不建议我们这么做。在实际开发过程中,我么么应该尽量为变量确定一个类型,这样可以提高安全性,加快运行速度。
如果不指定类型,debug模式下类型会是动态的。
使用dynamic时,则告诉编译器,我们不用做类型检测,并且知道自己在做什么。如果我们调用了一个不存在的方法时,回执行noSuchMethod()方法。 在默认情况下(Object里实现)它会抛出NoSuchMethodError
dynamic,var,object三者的区别
void main()//dynamic,var,object三者的区别
{
//dynamic
dynamic x = 'hello';//编译时不会揣测数据类型,但是运行时会推断
print(x.runtimeType);//String
print(x);
//但是这样的坏处就是会让dart的语法检查失效,所以有可能会造成混乱而不报错
//所以不要直接使用dynamic
x = 123;
print(x.runtimeType);//int,说明类型是可变的
print(x);
//var
var a = 'hello';
print(a.runtimeType);
print(a);
//a = 123;//会报错
a = '123';
print(a);
//Object
Object w = 1;
print(w.runtimeType);
print(w);
//不能调用Object不存在的方法
}
dynamic与Object的最大的区别在于静态类型检查上