gpt4 book ai didi

java - 与java同学解析泛型类型

转载 作者:行者123 更新时间:2023-11-30 03:43:49 25 4
gpt4 key购买 nike

尝试使用 TypeTools 惨遭失败后 Resolving generic type information with TypeTools我正在尝试使用https://github.com/cowtowncoder/java-classmate相反。

有人可以帮我修复这个代码吗?

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

最佳答案

您无法在 fromMap 方法中执行任何操作来获取绑定(bind)到类型变量 T 的类型参数。

我建议您专门为 Foo 创建一个 Mapper 实现。

class FooMapperImpl<S> implements Mapper<Foo, S> {
public Foo fromMap(S map) {
ObjectMapper objectMapper = new ObjectMapper();
Foo obj = objectMapper
.convertValue(map, Foo.class);
return obj;
}
}

(虽然我不明白为什么你需要一个源类型 S,如果它总是一个 Map。)

关于java - 与java同学解析泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26238857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com