2
を使用してパラメータ付きインターフェイスからクラスを抽出する抽象クラスを使用する代わりに、インターフェイスでJava 8のデフォルトメソッドを使用してパラメータ化されたタイプのクラスを抽出するにはどうすればよいですか?デフォルトメソッド
オプション1(失敗):
public interface EpicCoolInterface<T> {
default Class<T> getParameterizedTypeClass() {
return T.class; //doesn't work
}
オプション2(失敗):
public interface EpicCoolInterface<T> {
default Class<T> getParameterizedTypeClass() {
return (Class<T>) ((ParameterizedType) getClass().getGenericInterfaces()[0])
.getActualTypeArguments()[0];
//java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
}
サード(成功したが、無インタフェース)の試行:
public abstract class CoolAbstractClass<T> {
private Class<T> clazz;
public CoolAbstractClass() {
try {
this.clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public Class<T> getType() {
return clazz;
}
}