Java16 からの JEP394 Pattern Matching for instanceof

instanceof 後のcast する鬱陶しいのを回避で、よく紹介されますが、

if (obj instanceof String) {
    String s = (String)obj;
    // String s の処理
}
if (obj instanceof String s) {
    // String s の処理
}

次のように、総称型の配列を List に変換するのに使用すれば、
null を渡して
java.lang.NullPointerException: Cannot read the array length because "array" is null
にならずに済ませる処理を簡単に書くことができます。

public static <T> List<T> arrayToList(T...ary){
    return ary instanceof T[] a ? Arrays.stream(a).collect(Collectors.toList()) : new ArrayList<T>();
}

これは、

String[] ary = {"A", "B", "C"};
List<String> = arrayToList(ary);
List<String> = arrayToList("A", "B", "C");
List<String> = arrayToList(null);

で、いずれも例外を起こすことなくList を生成します。

Arrays.stream(ary).collect(Collectors.toList());
だったら、3番目の null を渡すと、
NullPointerException: Cannot read the array length because "array" is null
になってしまいます。