「Java」ジェネリックなインタフェースを実装した抽象クラスの作成方法

ジェネリクスを利用したインタフェースを実装する抽象クラスの作成についてつまずいたのでメモ。

下記の感じのジェネリックなインタフェースがあったとします。

package com.example;

public interface SampleInterface<E> {

    public E test(E e);
}



上記を実装した抽象クラスを定義したくて最初下記のように作成したんですが、 これだと「E の型が解決できない」とエラーが出て怒られます。

package com.example;

public abstract class SampleAbstruct implements SampleInterface<E> {

    protected final String hello = "hello";
}



どうしたらいいんだろうといろいろ調べてみるとどうも抽象クラスについても ジェネリックなクラスにする必要があるみたいです。

こうゆう感じで書けばよい模様。これでエラーも発生することなく、無事抽象クラスが定義できました。

package com.example;

public abstract class SampleAbstruct<E> implements SampleInterface<E> {

    protected final String hello = "hello";
}



職業柄、普段そんなにがっつりコードを書くわけじゃないですが、 なんだかんだで長い期間 Java を使ってますが、まだ構文的なところで つまづくとは恥ずかしい限りです。 まぁ、またひとつ勉強になりました。



一応、自分用メモですが、gist にもコードをメモ。

https://gist.github.com/atsushi-kitazawa/0f905ea3cded09e16cda0d1ae2dbdd44