grails – Groovy中的编译时检查
发布时间:2020-12-14 16:23:31 所属栏目:大数据 来源:网络整理
导读:在Groovy中,类型是可选的,因此您可以使用: String foo = "foo"foo.noSuchMethod() 要么 def foo = "foo"foo.noSuchMethod() 我假设第一个示例会生成编译时错误,而第二个示例只会在运行时失败.但是,情况似乎并非如此.根据我的经验,在两种情况下都不会生成编
在Groovy中,类型是可选的,因此您可以使用:
String foo = "foo" foo.noSuchMethod() 要么 def foo = "foo" foo.noSuchMethod() 我假设第一个示例会生成编译时错误,而第二个示例只会在运行时失败.但是,情况似乎并非如此.根据我的经验,在两种情况下都不会生成编译时错误. 我是否正确地假设声明引用类型的唯一好处是作为一种文档形式,即将意图传达给其他程序员.例如,如果我写一个方法,如: def capitalize(String arg) { return arg.toUpperCase() } 这传达了应该更有效地传递给函数的参数类型: def capitalize(def arg) { return arg.toUpperCase() } Groovy编译器在指定类型时是否执行任何类型检查? 谢谢, 解决方法
[编辑]较新版本的Groovy允许编译时静态类型检查.使用此批注的代码比常规运行时Groovy更快,因为跳过了许多动态检查.
正如Cesar所说,类型检查是一个运行时进程,这是Groovy比Java慢的主要原因之一(不是那个非常糟糕). 你可以看出为什么会这样,对吧?鉴于Groovy的动态特性,几乎不可能判断String是否已经扩展到代码中的其他地方以包含方法noSuchMethod().对于成员类型检查也是如此,因为完全可以删除一种类型的成员,并在代码中稍后添加具有相同名称的另一种类型的成员.这可能不常见,但很有可能. 问题是,您真正需要多少类型检查?你正在调用这个方法,你真的应该知道它需要什么参数,或者方法是否真的存在.使用编译时检查来节省查找时间并不是编译器的核心用途. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |