2016年9月14日水曜日

ジェネリクス型パラメータの省略

みなさん。 こんばんは。

今日は第1章「小さな言語使用の変更」の「ジェネリクス型パラメータの省略」を読みました。

従来のジェネリクスを使用したクラスのオブジェクトを生成する場合

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

上記のように左右2か所に型パラメータを記述していました。

JavaSE 7 からこのように簡潔に書けるようになりました。 

List<String> list = new ArrayList<>(); // 右辺の型パラメータの省略

この機能は、インスタンスへの参照を保持する変数がどのような型変数で宣言しているかを

コンパイラが判断し、同じ型を使ってインスタンス生成時の型変数を決定するというものです。

このような機能を「型推論」と呼びます。

型パラメータの省略が使える箇所
・変数の初期化   List<Integer> list = new ArrayList<>():
・三項演算子       List<String> list = flg ? new ArrayList<>(); : new LinkedList<>():
・メソッドの引数    String result = getResult(new ArrayList<>());
・メソッドの戻り値  List<String> getResultList(){ return new ArrayList<>(); }
・仮型パラメータを使用した変数への代入
public class Generics<T> {
private List<T> list;
public Generics() {
list = new ArrayList<>();
}

型パラメータの省略が使えない箇所
・匿名クラス

Callable<String> call = new Callable<> { ,,,} // コンパイルエラー

感想として実装するときに記述が少なくなるのは良いですが、慣れないうちは従来のジェネリクス

を使用したオブジェクト生成になってしまいそう。。



人気ブログランキングへ

0 件のコメント:

コメントを投稿