Groovy способ проверки нулевого параметра конструктора - PullRequest
3 голосов
/ 17 февраля 2020

Я хочу добавить ненулевые значения в мой groovy класс

class MyClass {
    private final String foo
    private final Integer bar

    MyClass(String foo, Integer bar) {
        // wanted ctr body
    }
    ...
}

Внутри конструктора я хочу присвоить параметры соответствующим полям И предотвратить нулевые значения .

Интересно, есть ли более удачный способ сделать это, чем довольно многословный

assert foo != null
assert bar != null
this.foo = foo
this.bar = bar

или

this.foo = Objects.requireNonNull foo
this.bar = Objects.requireNonNull bar

Ответы [ 2 ]

8 голосов
/ 17 февраля 2020

Если вы используете Groovy 3, вы можете использовать @NullCheck аннотацию, которая добавляет аргументы конструктора защитных условий (или любых методов).

import groovy.transform.NullCheck

@NullCheck
class MyClass {
    private final String foo
    private final Integer bar

    MyClass(String foo, Integer bar) {
        this.foo = foo
        this.bar = bar
    }
}

// Examples:
new MyClass("test", null) // throws IllegalArgumentException("bar cannot be null")

new MyClass(null, "test") // throws IllegalArgumentException("foo cannot be null")

Когда вы добавляете @NullCheck на уровне определения класса защитная нулевая проверка будет применена ко всем конструкторам и методам. Кроме того, вы можете добавить @NullCheck аннотацию к методам (или конструкторам), для которых вы хотите использовать только эту нулевую проверку.

До Groovy 3 такие защитные проверки должны быть реализованы вручную.

0 голосов
/ 23 марта 2020

Только важный нюанс, поскольку аннотация @NullCheck применяется только к явным методам и конструкциям, как указано в официальной документации.

http://docs.groovy-lang.org/next/html/gapi/groovy/transform/NullCheck.html

При размещении на уровне класса будут проверяться все явные методы и конструкторы.

Если вы используете другие аннотации как @TupleConstructor все неявные методы и конструкторы *1016* не собираются проверять параметры, не равные NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...