非公共静态成员变量和局部变量不需要编程接口?

时间:2017-03-04 01:55:08

标签: java

Stackoverflow上有几个部分相关的帖子,我试着通过留下评论来提出以下问题,但我没有权利发表评论。所以来这篇帖子。

是否为接口编程,例如私有方法或私有成员变量中的"List aList = new ArrayList();" 不必要的
对于私有方法中使用的集合对象,"ArrayList aList = new ArrayList();"非常好,不是吗? 这种想法是否也适用于私有成员变量?
总之,是否不需要为接口声明所有非公共静态成员变量和局部变量

2 个答案:

答案 0 :(得分:3)

您的问题相当于,“我是否应该遵循最佳做法,以防无法发挥作用?”实际上只有你(或你公司的风格指南)才能回答这个问题。

就个人而言,我总是遵循(我认为是)最佳做法,除非有特定(不寻常)的理由不这样做。这样,不寻常的情况就会突然出现,我知道要密切关注可能发生的事情。在你的例子中,ArrayList的使用调用了这个对象需要是可变的,这对我很重要,因为这意味着我不能只把它想象成一个对象列表,而是必须想到它作为自己的对象碰巧包含引用。

您遵循的做法 - 好的或坏的 - 将迅速成为您的第二天性。如果你对它们有合理的一致性,你甚至不必考虑它们 - 它们只会从你的指尖流出。你不希望他们成为好人吗?

答案 1 :(得分:2)

嗯,你的思路并不正确,但理想情况下你总是希望编程到界面而不是实现,因为一般来说,从长远来看,更容易遵循这种做法。它还会使您的代码看起来更加标准化。

但是,在某些情况下,您可能希望使用实现而不是接口 - 例如,如果您正在使用LinkedList并希望避免某些转换。

如果使用ArrayList<Something> list = new ArrayList<>(),世界会崩溃吗?当然不是,但是好的&#34;练习告诉我尽可能使用接口(在这种情况下为List)。