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;
}
}