从我的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返回是一种更好的做法,因为它更通用?
一般来说,使用List
将宣布排序很重要。因此,使用Collection
传达你的意图更清楚(因为你没有排序)。
也就是说,很多程序员只是在这种情况下使用List
。此外,如果您将来可能添加订购,现在使用List
可能会更好。因此,我认为t.b.h也可以。
至于Iterable
,我不会使用它,因为它不太常用,并且会让人困惑,除非底层的东西是生成器(懒惰地根据请求加载值)。
谢谢大家的回答/评论 – spartikus
除非有正当理由使用超类型,否则应始终使用子类型。为什么?因为确切地传达您的API客户端应该期望的结果非常重要。通过使用正确的设计尽可能地清除歧义。
如果遵循这个建议,它将意味着返回ArrayList或LinkedList,这几乎总是一个坏主意。 '正确的设计'引发了这个问题。 -1 – EJP
我强烈要求自己做一些测试并得到答案,但对于这种情况,我建议使用'List'来代替。 –
命令是否重要?如果是,则使用'List',否则使用'Collection'。 (如果你不需要'size',甚至可以使用'Iterable'。) –
我同意Luiggi,但它也取决于你的JSON/XML /其他生成器。生成器可能未被设置为序列化集合以及列表。 –