Можно ли создать объект без объявления класса?


можно ли создать объект без объявления класса? Как в JavaScript obj = {a: '1'}; console.log(obj.a)

3   51   2012-02-16 18:15:02

3 ответа:

в Groovy вы всегда должны предоставлять класс создаваемого объекта, поэтому в Groovy нет эквивалента объектно-литеральному синтаксису JavaScript.

однако Groovy имеет литеральный синтаксис для Map, который концептуально очень похож на объект JavaScript, т. е. оба являются коллекцией свойств или пар имя-значение.

эквивалентный Groovy код для JavaScript выше:

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

хотя здесь не используется имя класса вы все еще создаете объект определенного класса (java.util.LinkedHashMap). Приведенный выше код является просто сокращением для:

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

The Expando класс возможно, даже больше похож на объект JavaScript и полезен, когда вы хотите избежать "накладных расходов" при определении класса или хотите динамический объект, к которому можно добавить любое произвольное свойство во время выполнения.

немного удивлен, что никто не упомянул класс Expando. Это добавляет дополнительную функциональность над картой, в которой вы можете напрямую ссылаться на свойства в своих функциях. Пример кода ниже.

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")

вывод на печать:

def

ABC

заводной.ленг.MissingPropertyException

ABC (если вы закомментируете println ($a) на карте.run, println ($b) распечатывает ABC)

игнорировать дополнительные разрывы строк в выход. У меня было чертовски много времени, чтобы поставить def и ABC на последовательные линии.

посмотреть Expando API documentation для получения дополнительной информации.

Groovy имеет эквивалентную нотацию для json. Единственное отличие заключается в том, что они используют [:] для карт вместо {}. Таким образом, вы можете четко преобразовать json в нотацию объекта groovy.

import groovy.json.JsonOutput

def obj = [:] //define map
obj.batsmen = [] //define array 
def b = [:] 
b.name= "V. Kohli"
b.score = 55
b.strike = false

obj.batsmen.push(b)

//push second object
obj.batsmen.push(b)
println JsonOutput.toJson(obj)

здесь я не печатал объект напрямую. Так как он будет печатать с квадратными скобками нотации.

читать всю статью. Groovy для разработчиков javascript. https://metamug.com/article/groovy-for-javascript-developers.php