[SPRING] 파라미터 화 된 형태를 선택할 수 없습니다
SPRING파라미터 화 된 형태를 선택할 수 없습니다
나는 서버와 클라이언트 사이의 통신에 휴식을 만들려고합니다.
생성자는 다음과 같다 :
public class RestHelper<I, R> {
public RestHelper(String url, I input, Class<R> output){
ResponseEntity<R> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, output );
}
}
일반형, 나는 할 수있다 :
RestHelper<User, Result> helper = new RestHelper<>(url, user, Result.class);
어떻게 같은 제네릭 형식을 전달할 수 있습니다 :
ResultContainData<Boolean>
아래의 코드가 작동하지 않습니다 :
ResultContainData<Boolean> result = new ResultContainData<>();
RestHelper<User, ResultContainData<Boolean>> helper = new RestHelper<>(url, user, (Class<ResultContainData<Boolean>>) ((ParameterizedType) result.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
나는 런타임 오류가 발생했습니다 :하는 ParameterizedType으로 캐스팅 할 수 없습니다.
해결법
-
==============================
1.나는 해결책을 얻었다.
나는 해결책을 얻었다.
ResultContainData<Boolean> result = new ResultContainData<>(); RestHelper<User, ResultContainData<Boolean>> helper = new RestHelper<>(url, user, (Class<ResultContainData<Boolean>>)result.getClass());
그것은 나를 위해 일하고있다. 나는 아직도 더 나은 솔루션을 찾고 있어요.
-
==============================
2.그렇지 않으면 런타임에 지워집니다 - 당신은 서브 클래스 정의를 캡처하여 I와 R의 가치를 배울 수 있습니다. 전의:
그렇지 않으면 런타임에 지워집니다 - 당신은 서브 클래스 정의를 캡처하여 I와 R의 가치를 배울 수 있습니다. 전의:
class MyStringRestHelper extends RestHelper<String, String> {
그럼 당신은 I와 R의 값을 확인할 수 TypeTools 같은 것을 사용 :
Class<?>[] typeArgs = TypeResolver.resolveRawArguments(RestHelper.class, MyStringRestHelper.class); Class<?> i = typeArgs[0]; Class<?> r = typeArgs[1]; assert i == r == String.class;
from https://stackoverflow.com/questions/27000227/cannot-select-parameterized-type by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄은``유형의 하나 이상의 콩이있다, autowire가 없습니다 (0) | 2019.10.19 |
---|---|
[SPRING] 재귀 thymeleaf 사용하여 메뉴를 렌더링하는 방법 (0) | 2019.10.18 |
[SPRING] 자신감 문서에 대한 문자열에 @ApiModelProperty 데이터 유형을 설정하는 방법 (0) | 2019.10.18 |
[SPRING] 테스트 케이스로부터 제어기를 호출 할 때 자동 유선 컴포넌트와 제어기를 테스트하면 널 (0) | 2019.10.18 |
[SPRING] 스프링 사용자 정의 로그 아웃 필터는 로그 전에 어떤 행동을 수행 할? (0) | 2019.10.18 |