Во-первых, извините за такой глупый вопрос, но быстрый поиск в Google мне не сильно помог ...

Я разработчик Java и новичок в Groovy. Рассмотрим следующий фрагмент кода:

class Person {
    public String name
}

​def jack = new Person()
jack.name = "Jack"

​
def bob = new Person()
bob.name = "Bob"

def list = new java.util.ArrayList()

list.add(jack)
list.add(bob)

println list.name​

Его выполнение дает следующий результат (список значений поля name для каждого Person в списке):

[Jack, Bob]

Итак, мой вопрос: какой код Java соответствует вызову list.name? Я предполагаю, что это означает что-то вроде:

list.stream().map(person -> person.name).collect(Collectors.toList())

Может кто-нибудь объяснить, что именно происходит, когда я звоню list.name?

Заранее спасибо!

0
alxg2112 13 Ноя 2017 в 16:04

1 ответ

Лучший ответ

Ваш код

list.property

Это самый короткий способ написать это. Groovy подразумевает здесь использование оператора распространения :

list*.property

(обратите внимание на * там). И .property может быть здесь сокращением для .getProperty(), для неявного вызова геттера).

Итак, ваше предположение верно, что это жадный набор значений, которые .getProperty() возвращает в ArrayList.

0
cfrick 13 Ноя 2017 в 14:29