【问题标题】:groovy static classgroovy 静态类
【发布时间】:2009-05-11 16:42:07
【问题描述】:

“静态”在这个文件 sample.groovy 中做了什么?

static class froob {
}

无论是否使用“静态”,groovy 代码都可以正常编译。

【问题讨论】:

    标签: groovy


    【解决方案1】:

    绝对没有区别。这种情况下的静态会被忽略。

    为了进行测试,我创建了一个 groovy 类并将“javap -verbose StaticTest”的输出通过管道传输到一个文件中。然后将“静态”放在类 def 之前并将其传送到第二个文件。然后我区分了这两个文件。唯一的区别是那些与为每个类生成新的长类 ID 相关联的唯一 ID。

    【讨论】:

    • 从 groovy 2.5.4 开始是这样吗?当我尝试使用 groovy 2.5.4 的 gradle 5.1.1 时,我得到一个“类 '%s' 有一个不正确的修饰符 static。”错误。
    【解决方案2】:

    你指的是静态类还是静态类中的“main”静态方法?

    关键字“static”表示分配在程序开始时开始,在程序结束时结束。换句话说,没有办法以编程方式创建类“froob”的实例,而是在程序存在时自动创建一个实例,并将一直存在到程序结束。

    在您的小示例程序的上下文中,它实际上是没有意义的。只有“主”类需要是静态的,因为它需要在程序中的任何代码执行之前“存在”。

    【讨论】:

    • 嗯。这似乎可以从 Groovy 控制台静态类 froob { static void main(String[]f){ println "huh" println new froob().class.name } } 工作/执行
    • 呸!愚蠢的评论格式
       static class froob { static void main(String[]f){ println "huh" println new froob().class.name } } 
    【解决方案3】:

    在 Java 中,只有内部类可以是静态的。在 Groovy 1.7 之前,内部类是被禁止的,声明顶级类 static 没有任何效果。

    在 Groovy 1.7+ 中,我希望静态内部类具有与 Java 中相同的语义。声明顶级类可能没有任何效果(或被编译器禁止)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多