Loc*_*ieR 1 java collections instanceof is-empty
在我尝试重构的那一刻,我已经有了这个方法。
public static boolean isEmpty(Object value) {
boolean empty = false;
if (value instanceof String && ((String) value).isEmpty()) {
empty = true;
} else if (value instanceof List && ((List<?>) value).isEmpty()) {
empty = true;
} else if (value instanceof String[] && ArrayUtils.isEmpty((String[]) value)) {
empty = true;
} else if (value == null) {
empty = true;
}
return empty;
}
Run Code Online (Sandbox Code Playgroud)
有没有明显更好的方法来做到这一点,我错过了?
我知道我可以if使用链式||语句将所有条件放在一个语句上,但我真的不知道这比我现在得到的更好。
在 Java 17 中,您将能够使用switch表达式来编写它。根据问题 8213076,语法将是:
public static boolean isEmpty(Object value) {
return switch(value) {
case String s -> s.isEmpty();
case List l -> l.isEmpty();
case String[] sa -> ArrayUtils.isEmpty(sa);
default -> value == null;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这是Java 17 中的预览功能。它可能会在以后的版本中更改甚至完全删除。
(JEP 406 中最初提出的语法有点不同:
public static boolean isEmpty(Object value) {
return switch(value) {
case String -> value.isEmpty();
case List -> value.isEmpty();
case String[] -> ArrayUtils.isEmpty(value);
default -> value == null;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,原始版本在每个case. 中不需要单独的绑定变量。)