제네릭 정적 메서드가 있고 삽입 된 실제 제네릭 형식의 클래스 개체를 반환하고 싶습니다.
나는 이것을 다음과 같이 시도했다.
@SuppressWarnings("unchecked")
public static <T> Class<T> getClassType() {
Method thisMethod;
try {
thisMethod = CommonTools.class.getMethod("getClass", new Class<?>[0]);
} catch (Exception ex) {
//ErrorLog.error(ex.getMessage(), ex);
return null;
}
Type returnType = thisMethod.getGenericReturnType();
Type tType = returnType.getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) tType;
Class<T> clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];
return clazz;
}
이것에 대한 내 영감은 Google 코드 모르 피아 라이브러리에서 발견되었으며 다음과 같은 것을 사용했습니다.
(((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
내 코드와 코드의 차이점은 클래스에서 제네릭 유형을 찾기 위해 호출한다는 것입니다. 메소드에서 사용하고 싶습니다.
내 코드가 작동하지 않고 (Class) 변환 라인에 속합니다.
정적 메서드에서 현재 제네릭 유형을 얻는 방법에 대한 아이디어가 있습니까?
감사
이거 작동 안 할거야. getClass
기본적으로 return type이있는 method를 얻고 Class<CommonTools>
그 후에 TypeArgument가 CommonTools이기 때문에을 getActualTypeArguments
반환하는을 호출 Class<CommonTools>
합니다.
전화 Class<CommonTools> ct = getClassType();
하면 작동하지만 그러한 정보를 가질 필요가 없습니다.
내가 아는 한 JVM은 런타임에 모든 일반 정보를 지우므로 해당 정보를 얻을 수있는 방법이 없습니다. 가장 간단한 해결책은 생성시 인스턴스를 CommonTools
가져와 Class<T>
반환하지만 그렇게 일반적이지 않은 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다