gpt4 book ai didi

groovy - 在 Groovy 脚本中导入内部枚举

转载 作者:行者123 更新时间:2023-12-02 10:01:50 33 4
gpt4 key购买 nike

我在 Vehicles.groovy 中定义了一个 Groovy 类包含一些内部枚举:

public class Vehicles {
public enum Land {
BICYCLE,
CAR,
TRAIN
}

public enum Water {
SAILBOAT,
MOTORBOAT
}

public enum Air {
JET,
HELICOPTER
}
}

我想在脚本中引用这些枚举run.groovyVehicles.groovy 位于同一目录中.

完全限定枚举实例有效。

import Vehicles
println Vehicles.Land.BICYCLE

import static Vehicles.Land
println Vehicles.Land.BICYCLE

import Vehicles.Land.*
println Vehicles.Land.BICYCLE

正确打印BICYCLE .

但是,我想引用 Land枚举而不完全限定它。

我基本上尝试了静态/非静态、别名/非别名以及星号/非星号导入的每种组合。

import Vehicles.Landimport static Vehicles.Land.* (或 import Vehicles.Land as Land )给出 unable to resolve class错误。这看起来很奇怪,因为它们就是在 Java 中所做的事情(如果我错了,请纠正我。)

如果我尝试

import static Vehicles.Land
println Land.BICYCLE

import static Vehicles.Land as Land
println Land.BICYCLE

import Vehicles.Land.*
println Land.BICYCLE

,我收到错误

Caught: groovy.lang.MissingPropertyException: No such property: Land for class: run
groovy.lang.MissingPropertyException: No such property: Land for class: run
at run.run(run.groovy:2)

同样,

import Vehicles.Land.*
println BICYCLE

给出

Caught: groovy.lang.MissingPropertyException: No such property: BICYCLE for class: run
groovy.lang.MissingPropertyException: No such property: BICYCLE for class: run
at run.run(run.groovy:2)

Vehicles.groovy 添加包声明和run.groovy似乎也没有帮助。

所以...

  • Groovy 对导入内部类有哪些支持?为什么它与 Java 不同?
  • 如何让 Groovy 允许我引用非完全限定的内部枚举?

注意:我使用的是 Groovy 1.8.6 和 Oracle JDK 1.8.0_45。

最佳答案

Groovy 确实支持导入嵌套类,包括枚举。然而,要在没有完全限定的情况下访问它们,您需要以非静态方式导入它们(与 Java 不同),或者显式将它们声明为静态:

// Explicitly declare Water and Air as static to demonstrate
public class Vehicles {
public enum Land { BICYCLE, CAR, TRAIN }
public static enum Water { SAILBOAT, MOTORBOAT }
public static enum Air { JET, HELICOPTER }
}

// Non-static nested enum needs non-static import (unlike Java)
import Vehicles.Land
println Land.BICYCLE

// Explicitly static nested enum can be static imported
import static Vehicles.Water
println Water.SAILBOAT

// Explicitly static nested enum can also be non-static imported as well!
import Vehicles.Air
println Air.JET

工作示例:https://groovyconsole.appspot.com/script/5089946750681088

与 Java 不同,enums are implicitly static ,看来 Groovy 中的枚举不是隐式静态的,因此静态导入不起作用。这是因为 Groovy 中的枚举实际上与 Java 中的枚举不同,他们将 enhancements 。不幸的是,他们似乎忘记告诉编译器也使它们隐式静态(至少从 2.4.4 开始)。

我的建议是显式地将它们声明为静态(如果可以的话),因为这符合 Groovy 的概念,即有效的 Java 就是有效的 Groovy。

关于groovy - 在 Groovy 脚本中导入内部枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755994/

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