从Restful Web服务返回java.util.List还是java.util.Collection更好?

从Restful Web服务返回java.util.List还是java.util.Collection更好?,java,web-services,Java,Web Services,我正在编写一个Restful web服务。它是使用getResultList对数据库表的简单转储。EJB调用如下所示- Query query = em.createQuery("SELECT e FROM Todo e"); List<Todo> ret = (List<Todo>) query.getResultList(); return ret; Restful web服务可以将其作为java.util.List返回,因为这是它从getResultList得到

我正在编写一个Restful web服务。它是使用getResultList对数据库表的简单转储。EJB调用如下所示-

Query query = em.createQuery("SELECT e FROM Todo e");

List<Todo> ret = (List<Todo>) query.getResultList();
return ret;

Restful web服务可以将其作为java.util.List返回,因为这是它从getResultList得到的结果。但是,将其作为java.util.Collection返回是否是一种更好的做法,因为它更通用?

这实际上取决于需求。如果您希望使实现更通用,并且不确定在何处可以使用,则建议使用集合。

一般来说,使用列表将宣布订购事宜。因此,使用Collection可以更清楚地传达您的意图,因为您没有订单

也就是说,许多程序员在这种情况下只是使用列表。此外,如果您将来可能会添加排序,现在使用列表可能会更好。因此,t.b.h.我认为两者都可以


至于Iterable,我不会使用它,因为它不太常用,并且会让人感到困惑,除非底层是一个生成器根据请求惰性地加载值

除非有正当理由使用超类型,否则应始终使用子类型。为什么?因为准确地传达API客户机应该期望的结果是很重要的。通过使用正确的设计,尽可能消除歧义。

我强烈建议您自己做一些测试并获得答案,但对于这种情况,我建议使用列表。顺序重要吗?如果是,请使用列表,如果不是,请使用集合。我同意Luiggi的观点,但这也取决于您的JSON/XML/其他生成器。生成器可能不是为序列化集合和列表而设置的。通常我会说,返回对更抽象类型的引用会更好,因为它将您与确切的底层类型分离,让您以后可以自由更改底层实现。然而,我认为这个列表在这种情况下可能已经足够抽象了。当然,如果集合公开了您需要的方法,那么请使用该方法。@SotiriosDelimanolis并同时查看消费者。大多数人使用Java到Java web服务,所以我想这不会是一个问题,但是当与其他PLs(如C)交互时,头痛开始了。。。所以我更喜欢在语言之间使用一个标准,并保留列表。如果遵循这个建议,就意味着返回ArrayList或LinkedList,这几乎总是一个坏主意正确的设计只是回避了这个问题-1感谢所有人的回答/评论