public static String getName(User user) {
if(user ==null || user.name == null) {
return "Unknown";
}
return user.name;
}
// 🅱️ Bad
public static String getName(User user) {
Optional<User> userOptional = Optional.ofNullable(user);
if(!user.isPresent()) {
return "Unknown";
}
return user.get().getName();
}
// ✅ Good
public static String getName(User user) {
return Optional.ofNullable(user).map(User::getName).orElse("Unknown");
}
public static<T> Optional<T> empty() {
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(value -> System.out.println(value)); // 输出: Hello
Optional<String> optional = Optional.of("Hello");
Optional<Integer> length = optional.map(String::length);
System.out.println(length.get()); // 输出: 5
Optional<String> optional = Optional.empty();
String result = optional.orElse("Default Value");
System.out.println(result); // 输出: Default Value
Optional<String> optional = Optional.empty();
String result = optional.orElseGet(() -> "Generated Value");
System.out.println(result); // 输出: Generated Value
Optional<String> optional = Optional.empty();
try {
optional.orElseThrow(() -> new IllegalArgumentException("Value is absent"));
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage()); // 输出: Value is absent
}