Вызов void для возможного нулевого объекта в одну строку - PullRequest
0 голосов
/ 23 мая 2019

Я использую Java8 в своем проекте, но я не могу решить эту проблему с хорошей реализацией.

UIInput textInput = ...;

if (textInput != null)
{
    textInput.setValid(false);
}

Есть ли решение, чтобы проверить, является ли объект null, и если нет, то вызовитена нем, в одной строке ?!

Ответы [ 3 ]

3 голосов
/ 23 мая 2019

Не.

То, что у вас есть, легко читается для любого, кто обладает знанием Java.Любая строка, неправильно использующая конструкцию, предназначенную для чего-то другого, у большинства людей займет больше времени, чтобы прочитать и понять, чем это.И, вероятно, некоторые люди неправильно его прочитают, и им придется читать его позже, когда он не будет вести себя так, как они ожидают во время сеанса отладки.

Краткость / Количество строк кода не является окончательной мерой для удобочитаемости или качества.

То, что вы можете сделать, если это происходит с неправильным уровнем детализации по сравнению с остальной частью вашего метода, это абстрагировать его одним вызовом метода.Скажем, создайте метод 'sureTextInputIsSet', который просто содержит этот код и возвращает потенциально измененный объект.

1 голос
/ 23 мая 2019

Если переменная может быть нулевой, объект необязательный, тогда:

Optional<UIInput> textInput = ...;

При косвенном, но всегда безопасном использовании:

textInput.ifPresent(ti -> ti.setValid(false));

И хорошая цепочка, например для Optional<UIInput> до Optional<String> вызова метода на UIInput.

String s = textInput.map(UIInput::getText).orElse("");
1 голос
/ 23 мая 2019
Optional.ofNullable(textInput).ifPresent(x -> x.setValid(false));

Но это , а не , для чего Optional было разработано ...

...