Skip to content
章节导航

dynamic、var、Object的使用与区别

1、dynamic

是所有 Dart 对象的基础类型, 在大多数情况下,通常不直接使用它, 通过它定义的变量会关闭类型检查,这意味着 dynamic x = 'hal';x.foo(); 这段代码静态类型检查不会报错,但是运行时会 crash,因为x并没有 foo() 方法,所以建议大家在编程时不要直接使用 dynamic;

var

是一个关键字,意思是“我不关心这里的类型是什么。”,系统会自动推断类型runtimeType;

Object

  • Object是 Dart 对象的基类,当你定义:Object o=xxx;时这时候系统会认为 o 是个对象;
  • 你可以调用 o 的 toString() 和 hashCode() 方法因为 Object 提供了这些方法;
  • 但是如果你尝试调用 o.foo() 时,静态类型检查会进行报错;
  • 综上不难看出 dynamic 与 Object 的最大的区别是在 静态类型检查上

示例

shell
dynamic x = 'hal';
  //通过dynamic定义的变量会关闭类型检查
  // x.foo();
  print(x.runtimeType);
  print(x);
  x = 123;
  print(x);
  print(x.runtimeType);


  var a = 'hal';
  //a = 123;//你可以改变 x的类型,但是无法改变 a的类型
  print(a.runtimeType);
  print(a);
  
  
  Object o1 = '11';
  print(o1.runtimeType);
  print(o1);