Почему мой Groovy println всегда возвращает нуль после правильного утверждения? - PullRequest
1 голос
/ 14 июня 2019

Я чрезвычайно новичок в Groovy и мне интересно, почему я получаю нулевое значение после моего кода.У меня есть App.groovy и Person.groovy, которые оба очень просты, и я думаю, что моя ошибка в автоматическом возврате для закрытия, но я не уверен,

package firstGradleGroovyBuild

class App {
    static void main(def args) {
        def myList = [1,2,"James","4"]

        myList.each {
            println("$it is of ${it.class}")
        }
        println()

        Person person = new Person()
        person.age = 13
        person.address = "Home"
        println(person)

        Person p2 = new Person()
        p2.firstName = "Joe"
        p2.lastName = "Shmo"
        p2.age = 23
        p2.address = "Away"
        println p2

        Person p3 = new Person(firstName: "Smoky", lastName: "Robinson", age: 24, address: "Mountains")
        println p3
    }
}

Так вот мойПриложение, и я просто пытаюсь проверить несколько разных вещей.
Сначала я хотел убедиться, что, не задавая имя и фамилию, я получу ноль на их месте.
Во-вторых, я просто хотел проверить нормальную настройку свойства
В-третьих, я хотел протестировать автоматический конструктор по умолчанию для инициализации реквизита.

Я также пытался заменить p2 w / tap {} после просмотра документации (не сработало), но я думаю, что это связано с тем, что tap используется исключительно как предпочтение для сохранения при вводе префикса p2 поверхи снова при обновлении экземпляра.

Person p2 = new Person().tap {
            firstName = "Jo"
            lastName = "Mo"
            age = 23
            address = "Away"
        }
        println p2

Вот мой класс Person

package firstGradleGroovyBuild

class Person {
    String firstName
    String lastName
    int age
    def address

    String toString(){
        println("${firstName} ${lastName} of age ${age} lives at ${address}")
    }

}

Мой вывод почти , как и ожидалось: все в println верно.

1 is of class java.lang.Integer
2 is of class java.lang.Integer
James is of class java.lang.String
4 is of class java.lang.String

null null of age 13 lives at Home
null
Joe Shmo of age 23 lives at Away
null
Smoky Robinson of age 24 lives at Mountains
null

Process finished with exit code 0

Но я получаю «ноль» после каждой печати.Может кто-нибудь объяснить, что мне не хватает?

1 Ответ

2 голосов
/ 14 июня 2019

Как вы уже видели, println возвращает ноль

Итак, в вашем toString вы распечатываете строку, а затем возвращаете null

toString mustnне печатайте.

Измените свой класс на:

class Person {
    String firstName
    String lastName
    int age
    def address

    String toString(){
        "${firstName} ${lastName} of age ${age} lives at ${address}"
    }
}

И все будет хорошо: -)

...