Условно исполняемые блоки должны быть доступны - PullRequest
0 голосов
/ 27 мая 2020

жалобы на сонар Тернарные операторы не должны быть вложенными.
Есть ли способ удалить эту жалобу, поскольку я новичок в java Мне нужна помощь в этом вопросе.

object form = null;
if(objs.getForm() != null)
form = objs.getForm();
String getName = form != null
                     ? referenceObjType + form.getName()
                     : "" + (objs.getType() == null ? "" 
                     : "(" //$NON-NLS-1$
                     + objs.Type().getTypeName() + ")" 
                     + objs.getName());

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Если вы новичок с Java, я бы воздержался от использования тернарных операторов, чтобы вы могли действительно понять, что делает каждый оператор.

Проблема: Я считаю, что операторы else (те, которые начинаются с ":") недоступны, потому что форма никогда не будет нулевой. Также вы добавляете строку перед проверкой, является ли она нулевой. Это всегда будет возвращать, что это не ноль. Вам также необходимо сгруппировать свой второй тернарный оператор в круглые скобки, например:

   String getName = form != null
             ? referenceObjType + form.getName()
             : "" + (objs.getType() == null ? "" 
             : "(" //$NON-NLS-1$
             + objs.Type().getTypeName() + ")" 
             + objs.getName());

Трудно дать вам полный ответ, так как я не знаю вашей исходной проблемы и не вижу другого кода, но я надеюсь, что это помогает

0 голосов
/ 27 мая 2020

А что насчет этого? Вложенные тернарные операторы - плохая практика.

    String getName= "";
    if (form != null) {
        getName = referenceObjType + form.getName();
    } else {
        getName = objs.getType() == null ? "" : String.format("(%s)%s",objs.Type().getTypeName(), objs.getName());
    }
0 голосов
/ 27 мая 2020

Для группировки второго тернарного оператора необходимо использовать круглые скобки:

String getName = form != null
                 ? referenceObjType + form.getName()
                 : "" + (objs.getType() == null ? "" 
                 : "(" //$NON-NLS-1$
                 + objs.Type().getTypeName() + ")" 
                 + objs.getName());

В java аддитивный оператор (+) имеет более высокий приоритет, чем оператор равенства (==). см .: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

Итак, без скобок оператор

"" + objs.getType() == null

Сначала выполняется объединение строк, а затем результат проверяется на нулевое значение. Поскольку пустая строка, к которой вы что-то добавляете, не может быть нулевым, этот оператор всегда будет давать false, и одна часть вашего тернарного оператора никогда не будет доступна.

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