Help us understand the problem. What is going on with this article?

Javaのジェネリクス(総称型)って何?

More than 3 years have passed since last update.

総称型について一切知らなかった西森用の備忘録です。

調べるに至った経緯

 先日、こんな感じの迷路のプログラムをJavaで作りました。
 Javaで穴掘り法の迷路作成を実装してみた。
 そこで先達の方(shiracamusさん)にバグを修正してもらったのですが、「ほほーなるほどー」と、そのプログラムに色々な知らないことが散りばめられていたので、調べようと思いました。
 プログラム内に関数型インターフェースが使われていたので調べてみたのですが、そこでまずこのジェネリクスについてつまずいたので、備忘録としてここに記します。

ジェネリクス(総称型)って?

 普段使ってるうえでよく目にするのがリストに入れる型の限定だと思います。
 List<String> list = new ArrayList<String>();
 こんな感じで。<String>の部分です。
 基本的にListは色々なものを入れることができますが、こうして<>で括ることで入れる型を限定できるわけですね。
 これが総称型です。ジェネリクスとも言います。

 ちなみに上記の書き方でIntegerを入れようとするとコンパイルエラーが起きます。
 このように、
 1.コードのミスが発見しやすい(コンパイルエラー)。
 2.コードを見たときに何の型を扱っているかが明白。
 といった利点があります。

 余談ですが、西森はこの書き方の名前を知らず、見つけるのに苦労しました。

クラスではどう書くの?

 それではインスタンス生成ではなく、クラスのほうで総称型を見ていきたいと思います。クラスの宣言ではこんな感じになってます。

public class GenericSample<T> {
    private T value;

    public void setValue(T val) {
        value = val;
    }

    public T getValue() {
        return value;
    }
}

 コードはこちらのリンク先のものです。
 Java総称型メモ(Hishidama's Java Generics Memo)

 このようにクラスで仮の型をつけてあげることで、内部でもその仮の型で定義ができるわけです(コンパイル時、T型はObject型としてコンパイルされているらしい)。
 実際に総称型を用いて指定した型で読み替えが行われ、その指定した型で処理が行われます。
 ちなみにこのTという名前はTypeから一文字をとったようです。何を使ってもいいようですが、慣例的にTとかEが用いられているそう。

最後

 関数型インターフェース調べたかったのでここらで西森は納得しましたが、上記リンクではメソッドやコンストラクタでの使い方だったり、様々なことが書いてあります。
 何か型が<>で括られてるけどこれって何?どういう意味?ぐらいの初心者向けなので、それ以外の方は上記リンクをお願いします。
 間違いがあったらコメントお願いします。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away