如果我们提供足够的泛型信息,像 Jackson 这样的库可以从 JSON 创建对象。
在杰克逊,我们可以做到
Class<?>[] parameterTypes;
JavaType type = objectMapper.getTypeFactory().constructParametricType(ObjectClass, parameterTypes);
objectMapper.readValue(json, type);
Run Code Online (Sandbox Code Playgroud)
在 java 中,可以通过多种方式定义泛型类,例如一个泛型类具有另一个泛型类,并且可以具有另一个泛型类,为了简单说明,考虑这三个类。
public class MultiLevelGenericTestData<T, V> {
private GenericTestData<T> tGenericTestData;
private GenericTestData<V> vGenericTestData;
}
public class MultiGenericTestData<K, V> {
private K key;
private V value;
}
public class MultiGenericTestDataSameType<T> {
private GenericTestData<T> genericTestData;
private MultiGenericTestData<T, T> multiGenericTestData;
}
Run Code Online (Sandbox Code Playgroud)
我知道类型擦除和其他事情,但有没有办法识别类型 T, V从 的对象中MultiLevelGenericTestData?
我想到的一种方法是检查泛型类型并查看它们的名称并检查所有字段,直到找到所有类型。一旦我们遇到具有相同泛型类型的多个字段的情况,这很快就会变得棘手,例如在MultiGenericTestDataSameType,我们应该只得到一种泛型类型。
// This method should find all type's class names in the list
// that can be …Run Code Online (Sandbox Code Playgroud)