2015-07-14 3 views
13

Я пытаюсь упростить следующий код.Java - Check Not Null/Empty else присваивает значение по умолчанию

основных шагов, которые коды должны выполнять следующий:

  1. Присвоить Строка Значение по умолчанию
  2. Выполнить метод
  3. Если метод возвращает нуль/пустая строка оставить строку, как по умолчанию
  4. Если метод возвращает действительная строку установить строку к этому результату

Простой пример быть:

String temp = System.getProperty("XYZ"); 
    String result = "default"; 
    if(temp != null && !temp.isEmpty()){ 
     result = temp; 
    } 

Я сделал еще attemp использованием тройной оператор:

String temp; 
    String result = isNotNullOrEmpty(temp = System.getProperty("XYZ")) ? temp : "default"; 

isNotNullOrEmpty() Метод

private static boolean isNotNullOrEmpty(String str){ 
    return (str != null && !str.isEmpty()); 
} 

Можно ли сделать все это в режиме онлайн? Я знаю, что мог бы сделать что-то вроде этого:

String result = isNotNullOrEmpty(System.getProperty("XYZ")) ? System.getProperty("XYZ") : "default"; 

Но я звоню тем же методом дважды. Я бы что-то вроде сделать что-то вроде этого (который не работает):

String result = isNotNullOrEmpty(String temp = System.getProperty("XYZ")) ? temp : "default"; 

Я хотел бы инициализировать «временный» Строка в пределах одной и той же линии. Это возможно? Или что я должен делать?

Благодарим вас за предложения.

Tim

+0

Есть ли Groovy опция? – chrylis

ответ

4

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

public <T> T getValueOrDefault(T value, T defaultValue) { 
    return value == null ? defaultValue : value; 
} 
+0

Спасибо shibashis. Я все еще использую этот код и имею метод для множества типов объектов! Вместо этого я попытаюсь использовать generics, чтобы упростить код. Спасибо – Cam1989

+1

@ Cam1989: Это не отвечает на вопрос, который вы задали, потому что он не обрабатывает пустые строки ... он использует только значение «null», а не пустое ... если это то, что вы хотели, это то, что вы должны были спросить. Это отличное решение для другой проблемы, но оно * является решением другой проблемы ... –

+0

он выполнил бы пустое требование, заменив «значение == null» на «isNotNullOrEmpty (value)» и значение переключения и defaultValue в тройных ответах –

10

Похоже, вы, вероятно, хотите простой метод, как это:

public String getValueOrDefault(String value, String defaultValue) { 
    return isNotNullOrEmpty(value) ? value : defaultValue; 
} 

Тогда:

String result = getValueOrDefault(System.getProperty("XYZ"), "default"); 

На данный момент, вы не потребностьtemp .. вы эффективно использовали параметр метода как способ инициализации временной переменной.

Если вы действительно хотитеtemp и вы не хотите дополнительный метод, вы можете сделать это в одном заявлении, но я на самом деле не так:

public class Test { 
    public static void main(String[] args) { 
     String temp, result = isNotNullOrEmpty(temp = System.getProperty("XYZ")) ? temp : "default"; 
     System.out.println("result: " + result); 
     System.out.println("temp: " + temp); 
    } 

    private static boolean isNotNullOrEmpty(String str) { 
     return str != null && !str.isEmpty(); 
    } 
} 
+0

Приятный трюк здесь :) – hagrawal

+0

@fge Давайте скажем, что это не случай System.getProperty(), а некоторый метод, который не имеет этого дополнительного параметра для значения по умолчанию. Тогда трюк будет работать, он масштабируется. – hagrawal

+0

Как я сделал это настолько сложным !? Большое спасибо! Я использовал метод getValueOrDefault(). Отличный ответ. – Cam1989

14

Использование Java 8 Optional:

String getValueOrDefault(String defaultValue) { 
    return Optional.ofNullable(System.getProperty("property")) 
     .filter(s -> s != null && !s.isEmpty()).orElse(defaultValue); 
} 
+0

Спасибо! Выглядит хорошо для будущей справки, однако программное обеспечение/api, которое я использую, поддерживает только java 7 на данный момент! – Cam1989

+6

WOW! По сравнению с swift 's = q ?? r'. – Q8i

8

Использование org.apache.commons.lang3.StringUtils

String emptyString = new String();  
result = StringUtils.defaultIfEmpty(emptyString, "default"); 
System.out.println(result); 

String nullString = null; 
result = StringUtils.defaultIfEmpty(nullString, "default"); 
System.out.println(result); 

Оба указанных выше опций напечатает:

по умолчанию

по умолчанию

Смежные вопросы