Dart语言中 dynamic 和 Object 的不同之处

在 Dart 语言中,dynamic 的一个角度看来,它不是真正意义上的一种类型,可以认为dynamic是一种关闭编译器类型检查的开关,使用它定义的类型就相当于告诉了并告诉静态类型系统:不要管我了,我知道我在干嘛。

比如说在代码中定义一个类型dynamic o;变量o就相当于一个没有定义类型的变量,打上了一个“忽略类型检查”的标签。

当我们在用Object定义变量的时候Object o = something;就相当于告诉静态类型系统只会调用Object类下面的东西。可以调用toStringhashCode,因为这些方法定义在了Object类下,但是不可以调用o.foo()否则会得到一个警告,因为这个方法没有定义在Object下面,系统不知道你要干些什么,代码可能是错误的。

如果你写 dynamic o = something;,你告诉系统不做任何假设,也不进行任何检查。如果你写 o.foo(),它不会给出警告。你告诉它“与 o 有关的一切都是 OK 的!相信我,我知道我在做什么”,所以它认为 o.foo() 是 OK 的。

权力越大,责任越大,如果你为一个变量禁用类型检查,责任就落实到了你的身上,确保你不会做错任何事情。

翻译自:What is the difference between dynamic and Object in dart? – Stack Overflow

参考:1.4 Dart语言简介 | 《Flutter实战·第二版》 (flutterchina.club)

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇