如何从 Groovy 构造一个(非静态)Java 内部类
Posted
技术标签:
【中文标题】如何从 Groovy 构造一个(非静态)Java 内部类【英文标题】:How do I construct a (non-static) Java inner class from Groovy 【发布时间】: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 的实例 【参考方案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 如果没有资格B
– new A.B(a, "test")
(使用 Groovy 2.3.9),我无法让它工作
这不起作用。我得到“Groovyc:无法解析 B 类”以上是关于如何从 Groovy 构造一个(非静态)Java 内部类的主要内容,如果未能解决你的问题,请参考以下文章