遠き君へ

〜インターネットの最果てで自分語りを垂れ流すブログ〜

プリミティブ型の配列はジェネリクスの型引数に使える

Javaではジェネリクスの型引数にプリミティブ型が使えないというのは基本中の基本だと思いますが、
プリミティブ型の配列 は使うことができます。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Optional<Integer> integerOpt = Optional.of(1);
        System.out.println("Optional<Integer>: " + integerOpt);
        // -> Optional<Integer>: Optional[1]
        
        // Optional<int> intOpt = Optional.of(1);
        // -> コンパイルエラー
        
        Optional<Integer[]> integerArrayOpt = Optional.of(new Integer[]{1, 2});
        System.out.println("Optional<Integer[]>: " + integerArrayOpt.map(Arrays::toString));
        // -> Optional<Integer[]>: Optional[[1, 2]]
        
        Optional<int[]> intArrayOpt = Optional.of(new int[]{1, 2, 3});
        System.out.println("Optional<int[]>: " + intArrayOpt.map(Arrays::toString));
        // -> Optional<int[]>: Optional[[1, 2, 3]]
    }
}

今まで使えないんだと思い込んでましたが、
配列はObjectを継承している *1 ので、まぁ当然っちゃ当然なのでした。。。

(Javaにおいて配列は、今や基本的に非推奨だと思うし、文法とか扱いが特殊だから、
使うときいつもググってる。。。)

background image is created by Niellyn & bhsav.