gpt4 book ai didi

java - JAXB 可以生成 ArrayList 而不是 List 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:02:32 27 4
gpt4 key购买 nike

<complexType name="BookShelf">
<sequence>
<choice minOccurs="0" maxOccurs="unbounded">
<element name="newBook" type="string"/>
<element name="oldBook" type="string"/>
</choice>
</sequence>
</complexType>

JAXB 将属性生成为 List<JAXBElement<String>> .有什么方法可以生成 ArrayList 吗?

最佳答案

为什么,那对你有什么好处?

  1. ArrayList<E> 没有公开中没有的方法 List<E> 界面,所以有你无能为力 ArrayList<E>你做不到的与任何其他 List<E> (实际上有一个: ArrayList.trimToSize() ,谢谢@Joachim Sauer,但它是几乎不需要)。
  2. API 的糟糕做法是接受或返回实现类型而不是底层接口(interface)。我建议你按照Collections Trail的Sun Java 教程和/或阅读 Effective Java by Joshua Bloch(你会知道他是什么谈论from this shortpreview ,这是下面引用的来源)以了解更多关于集合框架和接口(interface)用法。
  3. 谁说底层列表实现不是 ArrayListArrayList是最常用的List实现无论如何,很有可能JAXB 实际上会返回一个 ArrayList , 它只是不会告诉你所以(因为你不需要知道)。

条目 52:通过接口(interface)引用对象(摘录)

Item 40 contains the advice that you should use interfaces rather than classes as parameter types. More generally, you should favor the use of interfaces rather than classes to refer to objects. If appropriate interface types exist, then parameters, return values, variables, and fields should all be declared using interface types. The only time you really need to refer to an object’s class is when you’re creating it with a constructor. To make this concrete, consider the case of Vector, which is an implementation of the List interface. Get in the habit of typing this:

// Good - uses interface as type
List<Subscriber> subscribers = new Vector<Subscriber>();

rather than this:

// Bad - uses class as type!
Vector<Subscriber> subscribers = new Vector<Subscriber>();

[ ... ]

来源: Effective Java,preview on SafariBooksOnline .

关于java - JAXB 可以生成 ArrayList 而不是 List 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4790986/

27 4 0