从我的Restful Web Service返回java.util.List或java.util.Collection是否更好?

问题描述:

我有一个Restful Web服务,我正在写。它是使用getResultList的数据库表的简单转储。该EJB调用看起来是这样的 -从我的Restful Web Service返回java.util.List或java.util.Collection是否更好?

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

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

RESTful Web服务可能返回这是因为多数民众赞成它是走出getResultList的一个java.util.List。但是,将它作为java.util.Collection返回是一种更好的做法,因为它更通用?

+2

我强烈要求自己做一些测试并得到答案,但对于这种情况,我建议使用'List'来代替。 –

+2

命令是否重要?如果是,则使用'List',否则使用'Collection'。 (如果你不需要'size',甚至可以使用'Iterable'。) –

+0

我同意Luiggi,但它也取决于你的JSON/XML /其他生成器。生成器可能未被设置为序列化集合以及列表。 –

一般来说,使用List将宣布排序很重要。因此,使用Collection传达你的意图更清楚(因为你没有排序)。

也就是说,很多程序员只是在这种情况下使用List。此外,如果您将来可能添加订购,现在使用List可能会更好。因此,我认为t.b.h也可以。

至于Iterable,我不会使用它,因为它不太常用,并且会让人困惑,除非底层的东西是生成器(懒惰地根据请求加载值)。

+0

谢谢大家的回答/评论 – spartikus

这确实取决于要求。如果你想让实现更通用,并且如果你不确定在哪里可以使用,那么更好使用CollectionPlease find why?

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

+0

如果遵循这个建议,它将意味着返回ArrayList或LinkedList,这几乎总是一个坏主意。 '正确的设计'引发了这个问题。 -1 – EJP