はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回はGenericについて説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第22回 ラッパークラスです。
Genericsとは?
ジェネリクス(Generics)はJava5で導入されたものであり、データ型を一般化する(Generalize)という意味になります。
ジェネリクスはクラスまたはメソッドで使用するデータ型をあらかじめ指定する方法です。
ジェネリクスを使用するとデータ型ミスマッチの問題をコンパイル過程で予防することができます。
そして、ジェネリクスを使用すると型キャストをする必要がなくなり、プログラムの性能が向上されます。
サンプル
上記のサンプルのようにジェネリクスでデータ型を指定しなくてデータを格納すると
格納するデータをObject型として格納します。
なので、型キャストをしなければなりません。
ジェネリクスでデータ型をあらかじめ指定すると格納されるデータが指定されたデータで格納されるので、データを出すときに型キャストをしなくても問題ありません。
ジェネリクスの書き方
1 2 3 |
public class クラス名<T> public interface インターフェース名<E> |
上記のように作成します。
括弧<>の中には決まった規則はありませんが、一般的に大文字とアルファベットで表現します。
サンプル1
1 2 3 4 5 6 7 8 9 10 11 12 |
public class GenericClassSample<T> { private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } } |
上記のように作成したクラスはインスタンスを生成して使うとき、
データ型を指定して使用します。
1 2 3 4 5 6 7 8 9 |
public class GenericsSample { public static void main(String[] args) { GenericClassSample<String> classSample = new GenericClassSample<String>(); classSample.setT("SetItem"); String getItem = classSample.getT(); } } |
サンプル2
1 2 3 4 |
public interface GenericInterfaceSample<T> { public T testMethod(T t); } |
上記のように作成されたインターフェースは実装クラスでデータ型を指定することができます。
1 2 3 4 5 6 7 8 |
public class GenericClassSample<T> implements GenericInterfaceSample<String>{ @Override public String testMethod(String t) { return null; } } |
ジェネリクスの範囲指定
ジェネリクスで指定するデータ型の範囲も継承を利用すると制限することができます。
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 |
public class GenericClassSample<T extends Number>{ private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } } |
上記のように作成されているクラスはジェネリクスでデータ型を指定する時、
Numberクラスを継承するクラスしか指定できません。
上記の画像はジェネリクスでデータ型をStringとしましたが、
StringはNumberクラスの子供クラスではないので、コンパイルエラーが表示されます。
終わりに
今回の記事は以上になります。
次回はCollection Frameworkを学びましょう。
ご覧いただきありがとうございます。
コメント