#java #if-statement #null #apache-stringutils
#java #if-statement #null #apache-stringutils
Вопрос:
Сначала мне нужно получить само перечисление, используя RegoDocumentType.getByValue(createOrderRequest.getIdDocument().getIdType())
Затем проверьте значение null, если оно не равно null, оно вернет значение enum . В противном случае он вернет значение createOrderRequest.getIdDocument().getIdType()
по умолчанию.
Итак, как мне реорганизовать код, чтобы использовать только один оператор if для обработки как NRIC / 11B, так и для преобразования значения smag в значение rego с использованием RegoDocumentType enum?
Вот мое перечисление:
public enum RegoDocumentType {
NRIC_11B("NRIC/11B", IdentityType.NRIC.toValue()),
FIN("Employment Pass", IdentityType.EM_PASS.toValue()),
;
private static final Map<String, RegoDocumentType> BY_SMAG_VALUE = new HashMap<>();
static {
for (RegoDocumentType identityType : values()) {
BY_SMAG_VALUE.put(identityType.getSmagValue().toLowerCase(), identityType);
}
}
private final String smagValue;
private final String regoValue;
RegoDocumentType(String smagValue, String regoValue) {
this.smagValue = smagValue;
this.regoValue = regoValue;
}
public String getSmagValue() {
return smagValue;
}
public String getRegoValue() {
return regoValue;
}
public static RegoDocumentType getBySmagValue(String smagValue)
{ return BY_SMAG_VALUE.get(smagValue.toLowerCase()); }
}
Комментарии:
1. Вы имели в виду
RegoDocumentType. getBySmagValue(createOrderRequest.getIdDocument().getIdType())
?2. О да, это то, что я имел в виду. Извините за опечатку.
3. Вы ожидаете, что
createOrderRequest.getIdDocument().getIdType()
это может быть null, или вы ожидаете, чтоcreateOrderRequest.getIdDocument().getIdType()
это значение не входит в число предопределенных значений enum?4. Я ожидаю, что createOrderRequest.getIdDocument().getIdType() может быть нулевым.
5. Из вашего примера вы хотите логику:
IF createOrderRequest.getOrderId() is not null AND createOrderRequest.getIdDocument().getIdType() is "FIN" THEN return "Employment Pass" ELSE return createOrderRequest.getIdDocument().getIdType()
это то, что вам нужно? Что, еслиcreateOrderRequest.getIdDocument().getIdType()
значение равно null?
Ответ №1:
String something = "";
if(something == null || something.isEmpty()) {
// return A
} else {
// return B
}
или
String something = "";
return something == null || something.isEmpty() ? [value A] : [value B];
Ответ №2:
createOrderRequest.getIdDocument().getIdType()
в вашем случае, похоже, это строка. Вы не можете вернуть строку из getBySmagValue
. Рассмотрите возможность возврата null или создания исключения вместо этого:
public static RegoDocumentType getBySmagValue(String smagValue) {
if (smagValue == null) reutrn null;
return BY_SMAG_VALUE.get(smagValue.toLowerCase());
}
или
public static RegoDocumentType getBySmagValue(String smagValue) {
if (smagValue == null) throw new IllegalStateException();
return BY_SMAG_VALUE.get(smagValue.toLowerCase());
}