參數要檢查 not null 有幾個做法:
- Java 1.4 的 Assertions
- Java 7 的 Objects#requireNonNull()
- Java 8 的 Optional#of()
- Lombok 的 @NonNull
void assert4(Object o) {
assert o != null;
// Exception in thread "main" java.lang.AssertionError
assert o != null : "o is null";
// Exception in thread "main" java.lang.AssertionError: o is null
}
但是 JVM 預設關閉,所以要記得帶參數 -enableassertions。
void java7(Object o) {
Objects.requireNonNull(o);
// Exception in thread "main" java.lang.NullPointerException
// at java.util.Objects.requireNonNull(Objects.java)
Objects.requireNonNull(o, "o is null");
// Exception in thread "main" java.lang.NullPointerException: o is null
// at java.util.Objects.requireNonNull(Objects.java)
}
void java8(Object o) {
Optional.of(o);
// Exception in thread "main" java.lang.NullPointerException
// at java.util.Objects.requireNonNull(Objects.java)
// at java.util.Optional.(Optional.java)
// at java.util.Optional.of(Optional.java)
}
但是這不直覺。
void lombok(@lombok.NonNull Object o) {
// Exception in thread "main" java.lang.NullPointerException: o is marked @NonNull but is null
}
個人偏好:Lombok > Java Assertions > Objects#requireNonNull() > Optional#of()
實務上:Lombok = Objects#requireNonNull() > Optional#of() > Java Assertions
參考資料:
沒有留言:
張貼留言