昔にArrayListのメモ書いたけど
この時はint
とかでArrayListは作れませーん!(ドヤ顔)みたいな感じでしたけど
実は作れましたってお話です
Autoboxing / Unboxingとも言うようです
Autoboxing
基本はsetみたいな意味合い
class化させたprimitive type変数に.valueOf()
明示的に書かなくてもコンパイル時に追加してくれる
Unboxing
基本はgetみたいな意味合い
class化させたprimitive type変数に.intValue()
.intValue()
とかdoubleValue()
とか
明示的に書かなくてもコンパイル時に追加してくれる
複雑バージョン
java.util.ArrayList; public class Main { public static void main (String[] args) { // ArrayList<int> intArray = new ArrayList<int>(); -> これはエラー Integer integer = new Integer(10); // これはOK Double dbl = new Double(10.0); // これもOK ArrayList<Integer> intArray = new ArrayList<Integer>(); //作れる! ArrayList<Double> intArray = new ArrayList<Double>(); //作れる! for(int i = 0; i < 10; i++) { intArray.add(Integer.valueOf(i)); //valueOf() で int の値をセット(Autoboxing) System.out.println(intArray.get(i).intValue()); //intValue()で int の値をゲット (Unboxing) } // double は省略 }
簡単バージョン
java.util.ArrayList; public class Main { public static void main (String[] args) { // ArrayList<int> intArray = new ArrayList<int>(); -> これはエラー Integer testint = 10; // コンパイル時はInteger.valueOf(10)をしている Double dbl = 10.0; // コンパイル時はDouble.valueOf(10.0)をしている int boxingInt = testint; //これもOK。testint.intValue()をしている ArrayList<Integer> intArray = new ArrayList<Integer>(); //作れる! ArrayList<Double> intArray = new ArrayList<Double>(); //作れる! for(int i = 0; i < 10; i++) { intArray.add(i); //valueOf() いらない(Autoboxing) System.out.println(intArray.get(i)); //intValue()いらない (Unboxing) } // double は省略 }