【问题标题】:How do I construct a (non-static) Java inner class from Groovy如何从 Groovy 构造一个(非静态)Java 内部类
【发布时间】:2015-01-16 09:00:41
【问题描述】:

如果我有一个像这样的内部类的类:

public class A {
    class B { //note, no modifier on class or constructor
      B(String c) {System.out.println(c);}
    }
}

从 Java(在同一个包中)我可以这样做:

public class C {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a. new B("test")); //crazy syntax!
    }
}

但在 Groovy 中,这是行不通的。那么如何[从同一个包中的 groovy 类] 构造一个新的 B?

【问题讨论】:

  • 我一直认为在创建A的实例时,你是在自动创建B的实例
  • @JClassic 不,实例化 A 不会自动创建 B 的实例

标签: java groovy inner-classes


【解决方案1】:

我让它像这样工作:

def a = new A()
A.B.newInstance(a, "foo")

还有这样的:

def a = new A()
new A.B(a, "foo")

如果 Java 代码在您的控制之下,而不是作为外部库,那么我宁愿使用工厂方法。

【讨论】:

    【解决方案2】:

    试试这个

        A a = new A();
        System.out.println(new B(a, "test")); //crazy syntax!
    

    【讨论】:

    • groovy 1.7 发行说明介绍了为什么在添加对内部类的支持时会出现这种语法:docs.codehaus.org/display/GROOVY/Groovy+1.7+release+notes
    • 如果没有资格 Bnew A.B(a, "test")(使用 Groovy 2.3.9),我无法让它工作
    • 这不起作用。我得到“Groovyc:无法解析 B 类”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    相关资源
    最近更新 更多