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

Java 我应该将接口声明为返回值还是将实现声明为返回值?,java,naming-conventions,Java,Naming Conventions,编写返回cats数组列表的方法时,以下哪项是正确的 public List getCatsByCatHerderID(int id); public ArrayList<Cat> getCatsByCatHerderID(int id); public List<Cat> getCatsByCatHerderID(int id); 列表是最好的选择。首先,它声明了一个接口作为返回值,因此您可以在以后修改实现,例如从ArrayList切换到其他东西。其次,它使用泛型,

编写返回cats数组列表的方法时,以下哪项是正确的

public List getCatsByCatHerderID(int id);

public ArrayList<Cat> getCatsByCatHerderID(int id);

public List<Cat> getCatsByCatHerderID(int id);
列表是最好的选择。首先,它声明了一个接口作为返回值,因此您可以在以后修改实现,例如从ArrayList切换到其他东西。其次,它使用泛型,这总是更好,因为它使值类型安全。

第三个

public List<Cat> getCatsByCatHerderID(int id);
第一个是不好的,因为它将强制API的用户转换列表条目,他可能会选择将它们转换为Dog for all you now


第二个不好的原因是,如果Java在1.7中提供了SuperFastList,而您想使用它而不是ArrayList,该怎么办?

谢谢您的编辑。我在寻找一种能描述所有这些的东西,但却没有贴上一百万次标签。就这样。
public ArrayList<Cat> getCatsByCatHerderID(int id);