没有声明类可以创build对象吗?

没有声明类可以创build对象吗? 像在JavaScript中一样obj = {a: '1'}; console.log(obj.a) obj = {a: '1'}; console.log(obj.a)

在Groovy中,您必须始终提供正在创build的对象的类,所以在Groovy中没有对应于JavaScript的对象字面量语法。

然而,Groovy确实有一个Map的字面语法,它在概念上与JavaScript对象非常相似,也就是说,它们都是属性或名称 – 值对的集合。

上面的JavaScript等效的Groovy代码是:

 def obj = [a: '1'] println obj.a 

即使这里没有使用类名,你仍然在创build一个特定类的对象( java.util.LinkedHashMap )。 上面的代码只是简写:

 def obj = new LinkedHashMap(); obj.a = '1' println obj.a 

Expando类可能更类似于JavaScript对象,当你想要避免定义一个类的“开销”,或者想要一个dynamic的对象,在运行时可以添加任意的属性的时候,它是很有用的。

对于没有人提到过Expando课程有些惊讶。 这在地图上增加了额外的function,你可以直接引用你的函数中的属性。 下面的代码示例。

 def expando = new Expando(a:"def") expando.run = {def b -> println("$a") println("$b") } expando.run("ABC") def map = [a:"def"] map.run = {def b -> println("$a") //THIS DOES NOT WORK. You will get a missing property exception. println("$b") } map.run("ABC") 

打印输出:

高清

ABC

groovy.lang.MissingPropertyException

ABC(如果您在map.run中注释掉println($ a),println($ b)会打印出ABC)

忽略输出中的额外换行符。 在连续的线路上投入了高清和美国广播公司的时间。

编辑:Api链接

http://groovy.codehaus.org/api/groovy/util/Expando.html