gpt4 book ai didi

Java 与 Groovy 内部/外部类差异

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:24 25 4
gpt4 key购买 nike

Java:

public final class Outer {
public static void main(String[] args) {
Inner.inner();
}

private static final class Inner {
private static void inner() {
System.out.println("inner");
outer();
}
}

private static void outer() {
System.out.println("outer");
}
}

运行时的输出:

inner
outer

常规:

public final class Outer {
static main(String[] args) {
Inner.inner()
}

static outer() {
println('outer')
}

static final class Inner {
static inner() {
println('inner')
outer()
}
}
}

运行时的输出:

$ groovy Outer
inner
Caught: groovy.lang.MissingMethodException: No signature of method: static Outer$Inner.outer() is applicable for argument types: () values: []
Possible solutions: inner(), use([Ljava.lang.Object;), use(java.lang.Class, groovy.lang.Closure), use(java.util.List, groovy.lang.Closure), putAt(java.lang.String, java.lang.Object), grep()
groovy.lang.MissingMethodException: No signature of method: static Outer$Inner.outer() is applicable for argument types: () values: []
Possible solutions: inner(), use([Ljava.lang.Object;), use(java.lang.Class, groovy.lang.Closure), use(java.util.List, groovy.lang.Closure), putAt(java.lang.String, java.lang.Object), grep()
at Outer$Inner.inner(Outer.groovy:13)
at Outer$Inner$inner.call(Unknown Source)
at Outer.main(Outer.groovy:3)

为什么会出现这种差异?使用 Outer.outer() 是可行的,但是有什么方法可以避免键入类名?

最佳答案

您可以将 import static Outer.outer 添加到脚本顶部以避免键入类名(有点)...您至少可以避免在方法中键入它。

为了补充已经提供的解释,如果您在输出阶段检查 Groovy 控制台内的 AST 浏览器,您可以看到这两个类都是顶级的,因此如果没有导入,“内部”无法解析为外部的方法.

final public class Outer implements groovy.lang.GroovyObject extends java.lang.    Object { 

}
final public static class Outer$Inner implements groovy.lang.GroovyObject extends java.lang.Object {

}

关于Java 与 Groovy 内部/外部类差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659567/

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