gpt4 book ai didi

groovy - @CompileStatic 给出 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 02:11:07 25 4
gpt4 key购买 nike

为什么只用@CompileStatic 注释会使下面的代码给出 NullPointerException?

class GroovyEach {
static def main(args) {
List items = null

items.each {
println 'hello'
}

}
}

下面的代码给出了异常(exception)。
import groovy.transform.CompileStatic

@CompileStatic
class GroovyEach {
static def main(args) {
List items = null

items.each {
println 'hello'
}

}
}

堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1372)
at trial.GroovyEach.main(GroovyEach.groovy:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

最佳答案

这是旧的 question 的倒数.静态编译时,items类型为 List , 未静态编译时,类型为 NullObject ,它以空安全的方式检索迭代器。这很容易证明。

这有效

class GroovyEach {
static void main(String[] args) {
List items = null
(org.codehaus.groovy.runtime.NullObject) items
}
}

这失败了 [Static type checking] - Inconvertible types: cannot cast java.util.List to org.codehaus.groovy.runtime.NullObject
@groovy.transform.CompileStatic
class GroovyEach {
static void main(String[] args) {
List items = null
(org.codehaus.groovy.runtime.NullObject) items
}
}

关于groovy - @CompileStatic 给出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com