TypeTools Resolving generic type information with TypeTools을 비참하게 사용하지 않으려 고 시도한 후 https://github.com/cowtowncoder/java-classmate을 대신 사용하려고합니다.자바 클래스 메이트로 제네릭 타입을 해결
누군가이 코드를 수정하도록 도움을 줄 수 있습니까? 이 최소한의 테스트 케이스와
java.util.LinkedHashMap cannot be cast to LoginInputMapTest$Foo java.lang.ClassCastException at shouldMapToFoo(LoginInputMapTest.java:83)
:
public T fromMap(S map) {
TypeResolver typeResolver = new TypeResolver();
ResolvedType type = typeResolver.resolve((new MapperImpl<T, S>() {}).getClass());
List<ResolvedType> params = type.typeParametersFor(MapperImpl.class);
ResolvedType typeT = params.get(0);
ObjectMapper objectMapper = new ObjectMapper();
T obj = objectMapper.convertValue(map, (Class<T>) typeT.getErasedType());
return obj;
}
는이 오류를 얻고있다
public static class Foo {
private String a;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}
@Test
public void shouldMapToFoo() {
Map<String, Object> map = new HashMap<>();
map.put("a", "aaa");
Mapper<Foo, Map<String, Object>> mapper = new MapperImpl<>();
Foo foo = mapper.fromMap(map);
Assert.assertEquals(foo.getA(), map.get("a"));
}
MapperImpl이 어떤 작업을 수행합니까? 실제로 액세스하지 않고 익명의 클래스를 만든 것처럼 보입니다. 아니면 그냥 약어인가요? –
익명 클래스는 하위 유형을 제공합니다. 제네릭 형식을 해결하는 데 필요하다고 생각합니다. 이 예제를 참조하십시오 : https://github.com/cowtowncoder/java-classmate#resolving-type-parameters-for-a-class – dmz73