gpt4 book ai didi

java - JAXB 如何猜测列表的模式类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:31 24 4
gpt4 key购买 nike

这是我从头开始定义的示例 jaxb 类。当我尝试使用 JAXB 为此类生成模式时,它正确地猜测列表的 itemType 为“int”

JVM 不会在运行时丢弃泛型吗?通过这样做,List 的容器类型在运行时丢失,但 jaxb 仍然知道 itemType 是 Integer。我很好奇 jaxb 框架是如何实现的。有什么想法吗?

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "int-list")
public class IntegerList{
@XmlValue
private List<Integer> values;

public List<Integer> getValues() {
return values;
}

public void setValues(List<Integer> values) {
this.values = values;
}
}

使用 JAXBContext.generateSchema 生成的相应模式:

  <xs:simpleType name="int-list">
<xs:list itemType="xs:int"/>
</xs:simpleType>

最佳答案

Doesn't JVM throw away generics at runtime?

是的,关于实际的字节码(好吧,是编译器将它们丢弃)。但是类和某些变量的通用类型信息仍然可以在运行时通过使用反射来收集。例如:

Field field = IntegerList.class.getDeclaredField("values");
Type fieldType = field.getGenericType();
Type typeArg = ((ParameterizedType)fieldType).getActualTypeArguments()[0];
System.out.println(typeArg); //class java.lang.Integer

只是一个猜测,但 JAXB 可能会做类似的事情,然后将 Integer.class 映射到 int.class

关于java - JAXB 如何猜测列表的模式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783791/

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