加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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().对于成员类型检查也是如此,因为完全可以删除一种类型的成员,并在代码中稍后添加具有相同名称的另一种类型的成员.这可能不常见,但很有可能.

问题是,您真正需要多少类型检查?你正在调用这个方法,你真的应该知道它需要什么参数,或者方法是否真的存在.使用编译时检查来节省查找时间并不是编译器的核心用途.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读