J2SE5.0以前は

基本データ型と参照型の間で相互に変換するにはラッパークラスを利用していた

----------

int priNum = 51;

Integer objNum = new Integer(priNum); //ラッパーIntegerにしてから

ArrayList list = new ArrayList();

list.add(objNum); //コレクションフレームワーククラスに入れる

----------


J2SE5.0からは、オートボクシングという機能が追加

単純な型変換は自動変換されるようになった

----------

int priNum = 51;

ArrayList list = new ArrayList;

list.add(priNum); //intのままで、コレクションフレームワーククラスに入れても大丈夫!

----------

enum型


関連する定数を宣言するときに便利。


J2SE5.0以前は

----------

Static final int Jan=1, Feb=2, Mar=3;

----------


I2SE5.0以降は

----------

enum Month{ Jan, Feb, Mar };

----------

このように宣言すると、Month型というデータ型が作られる。

※enum型の変数には、宣言時に列挙した定数しか指定できない。


つかうときは enum型名.定数名

----------

Month m = Month.Jan;

----------


■enum型の持つメソッド

public static E[] values()

 enum型のすべての定数値を配列で返す


public boolean equals(object other)

 otherがこのenum型の値と等しければtrueを返す


public int ordinal()

 このenum型の値が、何番目の定数値かを返す(0からはじまるので、1つめの値はゼロ番となる)

拡張forループ for-eachループ


コレクションや配列などの「集合」の一つ一つの要素に対してループする。
例えば、集合に5つの要素があれば5回ループする。
その時、ループの中で現在処理している要素を指定した変数名で参照できる。

----------
ArrayList<String> list = new ArrayList<String>();
list.add("えび");
list.add("なす");
list.add("いか");
list.add("ししとう");
list.add("かぼちゃ");
 ・
 ・
 ・
for(Srting value:list){ //データ型 ループ内で使用する変数名集合を保持する参照変数名
System.out.println(value);
}

----------


※for-eachと組み合わせて使えるコレクションフレームワーククラスは、java.lang.Iterableインターフェースを実装している。

配列にもつかえる。

ジェネリックスとは

型をパラメータ(変数)化することによって、それを使用する時まで実際の型を決めなくてもよくするための機構。


型パラメータという記述方式を用いる


ジェネリックス対応クラスの型名<使用する型名>


 ArrayList<String>

 HashMap<String, Integer> 

  HashMapは、2つの型パラメータを指定する


----------

ArrayList<String> list = new ArrayList<String>();

----------

 通常の型名を記述する部分を型パラメータで記述する


注意! 型パラメータの指定には参照型のみ使用可、基本データ型はダメ

----------

ArrayList<int> list = new ArrayList<int>();

----------

これ↑はダメ


ジェネリックスを定義している側のクラスでは、型パラメータを変数のように定まっていないものとして扱わなけれならない、具体的な型名が書かれておらず(メソッドの変数名のように)名前をつけて表現されている。E K V など、アルファベット大文字が慣例となっている。


それぞれのアルファベットは

E → Element

K → Key

V → Value という意味らしい。


この定義は

----------

ArrayList<E>

----------

↓実際に使うときにこうなる

----------

ArrayList<String>

AllayList<Integer>

ArrayList<MyClass>

----------


この定義は

----------

HashMap<K, V>

----------

↓実際に使うときにこうなる

----------

HashMap<String, Integer>

HashMap(String, MyClass>

HashMap<Integer, MyClass>

----------


※型パラメータを省略すると Object型 が指定されたとして扱われる。


■メソッドと型パラメータ

~Java APIより~

ArrayList<E>のメソッド

 boolean add(E object) 「E」がパラメータにつけられている名前

 E get (int index)


ジェネリックスを利用する場合には、オブジェクト生成時に型パラメータを指定する

----------

ArrayList<String> list = new ArrayList<String>();

----------

この時点で、使用できる型がStringに限定されて

----------

ArrayList<String>のメソッド

 boolean add(String o)

String get(int index)

----------

Stringオブジェクト専用になる


----------

ArrayList<String> list = new ArrayList<String>();

list.add("文字列"); //String型なのでOK

list.add(new Integer(10)); //String型以外なのでNG

----------


----------

ArrayList<Integer> list = new ArrayList<Integer>();

list.add("文字列"); //Integer型以外なのでNG

list.add(new Integer(10)); //Integer型なのでOK

----------


■<? extends X>とは

ArrayList(Collection < ? extends x > c)

 引数に受取れるのは「Eを継承している何らかのクラス専用として生成されたCollectionオブジェクト」


? extends E

EもしくはEのサブクラスという意味