2019年7月4日 星期四

[Java] 檢查參數 not null

參數要檢查 not null 有幾個做法:

  1. Java 1.4 的 Assertions
  2. 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

  3. Java 7 的 Objects#requireNonNull()
  4. 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)
    }
  5. Java 8 的 Optional#of()
  6. 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)
    }

    但是這不直覺。

  7. Lombok 的 @NonNull
  8. 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

參考資料:

[Java] Invalid HTTP method: PATCH

最近系統需要使用 Netty4,所以把衝突的 Netty3 拆掉,然後就出現了例外。 pom.xml <dependency> <groupId>com.ning</groupId> <artifactId>as...