Dart 是一种动态类型语言。即使你到处乱扔类型,它仍然是动态的。因此,考虑到这一点,通常当您进行铸造时,这意味着您要确保该事物属于特定类型。
就您而言,您想确保它是ButtonElement
。
您可以使用is
and as
用于类型测试目的的操作员:
// You can write code to test the type yourself:
if (btnSend is! ButtonElement) throw 'Not a button';
// Or you can use "as" that will throw if the type is wrong:
var btnSend = query('#btnSendToServer') as ButtonElement;
根据情况,我使用is
or as
。通常我不使用as
,因为它有(小?)性能开销。
您还可以采取另一种方法,我个人更喜欢这种方法。像这样写你的代码:
ButtonElement btnSend = query('#btnSendToServer');
当你开发时,以检查模式运行:
dart --checked foo.dart
或者当你使用 Dartium 时,了解如何使用标志手动启动 Dartium http://www.dartlang.org/dartium/#command。我已经有一段时间没有使用 Dart Editor 了,所以我不确定它是否默认使用选中模式以及是否可以更改它。
当在检查模式下运行时,分配给btnSend
如果类型不匹配将会抛出。这样做的好处是,当您在没有检查模式的情况下在生产中运行代码时,您的应用程序不会遭受任何性能开销。
并回答一些个人问题:
Does query
支持显式/隐式强制转换?
不,这只是一个不关心类型的随机函数。
是否有要搜索的查询ButtonElement
s only ?
你可以这样写:
query('button#btnSendToServer')
这是一个典型的 CSS 选择器,而不是 Dart 的东西。
我是否应该担心从查询返回的对象,或者我可以盲目地相信将返回对象ButtonElement
?
是的,也不是。我相信如果该对象不是一个对象,它最终会在某个时候抛出您的应用程序ButtonElement
,但我建议您在开发和编写时以检查模式运行,例如:
ButtonElement btnSend = query('#btnSendToServer');
由您决定要添加多少类型信息。如果您认为按钮很容易出现错误类型,那么我认为指定类型是有意义的。就我个人而言,我不会对类型着迷,只在我认为有意义的情况下才使用。