没有声明类可以创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链接