現場で覚えたJava文法知識【備忘録】④

今回の備忘録
「org.apache.commons.lang3」の「ObjectUtils」についてです。
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ObjectUtils.html

## 引数が全てNULLかチェックする場合
### 「ObjectUtils.allNull」
→全てNULLの場合、true
→全てNULLでない場合、false

```java:InputPractice4.java
import org.apache.commons.lang3.ObjectUtils; // 参照

@SpringBootApplication
public class InputPractice4 {

    public static void main(String[] args) {

        String testA = "　"; // スペース文字
        String testB = "あいう"; // 設定文字
        String testC = ""; //空文字
        String testD = null; //null
        String testE = null; //null

        // 「allNull」→全てNULLであればtrue
        // NULLを１つも指定しない（スペースや空文字も含める）
        if (ObjectUtils.allNull(testA, testB, testC)) {
            System.out.println("(1)全てNULLです。");
        }
        // NULLを１つだけ指定
        if (ObjectUtils.allNull(testA, testB, testC, testD)) {
            System.out.println("(2)全てNULLです。");
        }
        // NULLを2つ指定
        if (ObjectUtils.allNull(testD, testE)) {
            System.out.println("(3)全てNULLです。"); //　通る
        }
    }
}
// 結果
// (3)全てNULLです。
```

結論：
　全てがNULLの場合の、(3)だけが通る。
　もちろんですが、スペースや空文字はNULL判定されない。

## 引数が全てNULLでないことをチェックする場合
### 「ObjectUtils.allNotNull」
→全てNULLでない場合、true
→全てNULLの場合、false

```java:InputPractice4.java
import org.apache.commons.lang3.ObjectUtils; // 参照

@SpringBootApplication
public class InputPractice4 {

    public static void main(String[] args) {

        String testA = "　"; // スペース文字
        String testB = "あいう"; // 設定文字
        String testC = ""; //空文字
        String testD = null; //null
        String testE = null; //null

        // 「allNotNull」→ 全てNULLでなければtrue
        // NULLを１つも指定しない（スペースや空文字も含める）
        if (ObjectUtils.allNotNull(testA, testB, testC)) {
            System.out.println("(1)全てNULLではありません。"); //　通る
        }
        // NULLを１つだけ指定
        if (ObjectUtils.allNotNull(testA, testB, testC, testD)) {
            System.out.println("(2)全てNULLではありません。");
        }
        // NULLを2つ指定
        if (ObjectUtils.allNotNull(testD, testE)) {
            System.out.println("(3)全てNULLではありません。");
        }
    }
}

// 結果
// (1)全てNULLではありません。
```
結論：
　全てがNULLでない（１）が通る。
　１つでもNULLが混じっていたら、判定されない。

## 引数のいずれかにNULLがあるかをチェックする場合
### 「ObjectUtils.anyNull」
→いずれかがNULLの場合、true
→いずれもNULLで場合、false

```java:InputPractice4.java
import org.apache.commons.lang3.ObjectUtils; // 参照

@SpringBootApplication
public class InputPractice4 {

    public static void main(String[] args) {

        String testA = "　"; // スペース文字
        String testB = "あいう"; // 設定文字
        String testC = ""; //空文字
        String testD = null; //null
        String testE = null; //null

        // 「anyNull」→ NULLが含まれていたらtrue
        // NULLを１つも指定しない（スペースや空文字も含める）
        if (ObjectUtils.anyNull(testA, testB, testC)) {
            System.out.println("(1)NULLが１つ以上含まれています。");
        }
        // NULLを１つだけ指定
        if (ObjectUtils.anyNull(testA, testB, testC, testD)) {
            System.out.println("(2)NULLが１つ以上含まれています。"); //　通る
        }
        // NULLを2つ指定
        if (ObjectUtils.anyNull(testD, testE)) {
            System.out.println("(3)NULLが１つ以上含まれています。"); //　通る
        }
    }
}

// 結果
// (2)NULLが１つ以上含まれています。
// (3)NULLが１つ以上含まれています。
```

結論：
　１つでも含んでいたら検知される。
　あまり使い道はなさそうと感じた。

## 引数のいずれかにNULL以外があるかをチェックする場合
### 「ObjectUtils.anyNotNull」
→１つでもNULL以外がある場合、true
→全てNULLの場合、false

```java:InputPractice4.java
import org.apache.commons.lang3.ObjectUtils; // 参照

@SpringBootApplication
public class InputPractice4 {

    public static void main(String[] args) {

        String testA = "　"; // スペース文字
        String testB = "あいう"; // 設定文字
        String testC = ""; //空文字
        String testD = null; //null
        String testE = null; //null

        // NULLを１つも指定しない（スペースや空文字も含める）
        if (ObjectUtils.anyNotNull(testA, testB, testC)) {
            System.out.println("(1)NULLが１つも含まれていないです。"); //　通る
        }
        // NULLを１つだけ指定
        if (ObjectUtils.anyNotNull(testA, testB, testC, testD)) {
            System.out.println("(2)NULLが１つも含まれていないです。"); //　通る
        }
        // NULLを2つ指定
        if (ObjectUtils.anyNotNull(testD, testE)) {
            System.out.println("(3)NULLが１つも含まれていないです。");
        }
    }
}

// 結果
// (1)NULLが１つも含まれていないです。
// (2)NULLが１つも含まれていないです。
```

結論：
　NULL以外があった場合のみ検知というのももっと使わなさそう、、、

## 終わりに
前回の空文字・ブランクチェックと合わせて、NULLチェックもよく使うので、しっかり上の違いは知っておいた方が良さそうです。