我应该将接口声明为返回值还是将实现声明为返回值?

时间:2011-03-31 17:36:43

标签: java naming-conventions

在编写返回cat的arrayList的方法时,以下哪项是正确的。

public List getCatsByCatHerderID(int id);

public ArrayList<Cat> getCatsByCatHerderID(int id);

public List<Cat> getCatsByCatHerderID(int id);

3 个答案:

答案 0 :(得分:4)

List<Cat>是最佳选择。首先,它将接口声明为返回值,因此您可以稍后修改实现,例如从ArrayList切换到其他位置。其次,它使用泛型,它总是更好,因为它使值类型安全。

答案 1 :(得分:2)

第三个。

第一个是糟糕的,因为它会强制你的API用户投射List条目,他可能会选择将它们转换为(Dog)给你所有人。

第二个是糟糕的原因如果Java在1.7中提出了SuperFastList,你想用它代替ArrayList吗?

答案 2 :(得分:1)

public List<Cat> getCatsByCatHerderID(int id);

第三种方法,因为您只处理列表中定义的方法,而不必担心方法返回的列表类型。此外,如果您要使用Web服务,第3种方法是可以的,因为在Web服务中比List更好地理解ArrayList(假设.NET有ArrayList?)

如果确实想要返回ArrayList,那么:

public ArrayList<Cat> getCatsByCatHerderID(int id);