После неудачной попытки использовать TypeTools Resolving generic type information with TypeTools Вместо этого я пытаюсь использовать https://github.com/cowtowncoder/java-classmate.Устранение типичного типа с одноклассником java
Может кто-нибудь помочь мне исправить этот код?
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;
}
Я получаю эту ошибку:
java.util.LinkedHashMap cannot be cast to LoginInputMapTest$Foo java.lang.ClassCastException at shouldMapToFoo(LoginInputMapTest.java:83)
с этим минимальным теста:
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