Javaのジェネリクスの絡んだ時のメソッドとかの記述の説明が欲しい...

f:id:ts0818:20190512093823j:plain

「グレートでスよ こいつはぁ~~~っ(『ジョジョの奇妙な冒険:第四部 【東方仗助】』)」

東方仗助といえば、クレイジー・ダイヤモンドですよね、はい、どうもボクです。

というわけで、今回は、Javaジェネリクスについてですかね。ちなみに、「< >」はダイヤモンド演算子って言うらしいですね。

 

ちょいと説明欲しい

いや~、Javaのメソッドの記述で、ちょいと初見だと分かにくいのってあるあるだよねー、え?無いですか?

まぁ、実際に見たほうが早いということで。 

d.hatena.ne.jp

qiita.com

⇧  上記サイト様で紹介されてたものを引用させていただくということで。 

    public static <T extends Enum<T>, U> Optional<T> of(Class<T> clazz, Function<T, U> get, U value) {
        return Stream.of(clazz.getEnumConstants())
            .filter(i -> get.apply(i).equals(value))
            .findFirst();
    }    

とか、

    public static <E> void copy(List<? super E> dst, List<? extends E> src) {
	    for (int i = 0; i < src.size(); i++) {
		    dst.set(i, src.get(i));
	    }
    }    

どうでっしゃろ?

戻り値や、voidの前のジェネリクス、何なん?って思いません?いや、知ってる人からみたら、こいつ、何言ってるのん?な事かもしれませんが...

少なくとも、自分にとっては、未知の領域だったのでね...

d.hatena.ne.jp

⇧  上記サイト様も仰っていますね。

 

参考書には記載があるようですね。

⇧  やっぱり基本的なことは、書籍とかで勉強しないと駄目っぽいですかね... 

なんでも、「型パラメータリスト」って言うらしく、こいつを指定しておくと、「戻り値」「引数」 で利用可能らしい。

メソッドの定義以外にも使えるっぽいですね。

 

実際に試してみる

ということで、Eclipseを起動し、適当なJavaプロジェクト、クラス、列挙値(Enumのこと)を作成で。 

ソースについては、GitHubに公開してますので宜しければ見てみてください。

github.com

f:id:ts0818:20190602114238p:plain

⇧  プロジェクトの構成は、こんな感じで。

で、実際に動かしてみる。

f:id:ts0818:20190602205422p:plain

f:id:ts0818:20190602120308p:plain

「VirtualCurrency.class」で定義しているEnum値のものだけ出力されました。

Java まだまだ勉強しないこといけないことが多くて、心が折れそうですね...

今回はこのへんで。