第四十条中有一个建议:应该使用接口而不是类作为参数的类型。更一般的地讲,应该优先使用接口而不是具体实现类来引用对象。
如果有合适的接口类型存在,那么对于参数,返回值,变量和域来说,就都应该使用接口类型进行声明。
如果你养成了使用接口作为类型的习惯,你的程序将会更加灵活。
如声明变量像这样:
List<Apple> list = new Vector<Apple>();
而不是这样 Vector<Apple> list = new Vector<Apple>();
由于你使用了List来声明,你的变量在后面的阶段,后面的代码依赖于List接口,不会依赖于具体的实现类Vector类。
这样你依据业务需求将具体的实现类更换成 ArrayList,而不会导致后面的代码编译出错。但是如果你后面的代码依赖
与Vector类的某些特性,如同步策略,这是就不应该简单的将Vector更换为ArrayList。
如果没有合适的接口存在,完全可以用类而不是接口来引用对象。例如值类,String和BigInteger。记住,值类很少
会用多个实现编写。它们通常是final的,并且很少有对应的接口。使用这种值类作为参数,变量,域或者返回类型是
再合适不过的选择了。更一般的讲,如果具体类没有相关联的接口,不管它是否表示一个值,你都没有别的选择,只有
通过它的类来引用它的对象。Random类就属于这种情形。