Тернарный оператор - JAVA

Можно ли изменить это:

if(String!= null) {

    callFunction(parameters);

} else {

    // Intentionally left blank

}

... к тернарному оператору?

Ответ 1

Ну, ternary operator в Java действует так...

return_value = (true-false condition) ? (if true expression) : (if false expression);

... Еще один способ взглянуть на это...

return_value = (true-false condition) 
             ? (if true expression) 
             : (if false expression);

Вы задаетесь вопросом нечетко, и мы должны здесь принять.

  • Если (и только если) callFunction(...) объявляет возвращаемое значение non-void (Object, String, int, double и т.д.) - похоже, что это не делает это через ваш код - тогда вы могли бы это сделать...

    return_value = (string != null) 
                 ? (callFunction(...)) 
                 : (null);
    
  • Если callFunction(...) не возвращает значение, то вы не можете использовать тернарный оператор! Просто как тот. Вы будете использовать то, что вам не нужно.

    • Пожалуйста, напишите больше кода, чтобы устранить любые проблемы.

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

Вот как они должны работать...

if (obj != null) {            // If-else statement

    retVal = obj.getValue();  // One alternative assignment for retVal

} else {

    retVal = "";              // Second alternative assignment for retVale

}

Это можно преобразовать в...

retVal = (obj != null)
       ? (obj.getValue())
       : ("");

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

Кроме того, если ваше ложное предложение действительно пустое, вы можете сделать это...

if (string != null) {

    callFunction(...);

} // Take note that there is not false clause because it isn't needed

ИЛИ

if (string != null) callFunction(...);  // One-liner

Ответ 2

Да. Вы можете сохранить один и тот же блок null в else.

String result = str !=null ?  callFunction(parameters) : null;

Убедитесь, что callFunction(parameters) возвращает a String.

Ответ 3

Тернарный оператор может использоваться для объединения двух выражений, но пустой оператор не является выражением.

Вызов метода может использоваться как выражение, если метод возвращает значение (read: не объявлено void), и его можно использовать вместе с константой-заглушкой null, чтобы сформировать тернарный оператор, но результат будет снова быть выражением, которое не допускается в местах, где требуется инструкция, другими словами, он не может заменить оператор if.

Добавив еще одну конструкцию, которая принимает выражение и не налагает дополнительного побочного эффекта, вы можете построить полную замену. Например. объявив и присвоив новую, иначе неиспользуемую локальную переменную, вы получите:

Object dummy=condition? callFunction(parameters): null;

Но нет ничего лучше, чем просто сказать if(condition) callFunction(parameters);. Это может даже добавить лишние накладные расходы, поскольку он будет выполнять автоматический бокс, если возвращаемое значение является примитивным типом.

С Java 8 существует решение головоломки, которая работает даже для методов void:

((Runnable)(condition? ()->callFunction(parameters): ()->{})).run();

но он по-прежнему не имеет преимущества, просто используя if.

Ответ 4

Это может быть возможно, если ваш метод callFunction() имеет тип возврата. Тогда вы могли бы сделать это, как SURESH ATTA написал в своем ответе:

String result = str!=null ? callFunction(str) : null;

Или с любым другим типом для результата или любых других аргументов. Если вы хотите вызвать метод в else -Statement тоже, этот должен иметь тот же тип возврата, что и тот, который находится в вашем if -statement.

Если у вашего метода нет типа возврата/возвращаемый тип callFunction() равен void, невозможно изменить ваше if - else -стояние в трёхмерный оператор.