正在研读Joshua Bloch的《Effective Java》一书。书中至少在两条中提到了“优先使用接口而不是类”,一是第25条中的“参数类型优先使用接口而不是类”;另一个是第34条中的“通过接口引用对象”。
两条中所提及的例子一个是Map,一个是List(因为此书的作者就是Collection Framwork的作者)
Map ht = new Hashtable();
String value= doSomething(ht);
private String doSomething(Map pram) {
.....
// 比如这里需要 pram.clone(); 该怎么办呢?
Map pram2 = pram.clone(); // 会出错的,因为Map接口中没有clone方法,那是Cloneable接口中的
}
书上说“没有理由在编写一个方法时使用Hashtable作为输入,相反,应该使用Map”。
但是我想问的是:一个类可能实现多个接口,如果不同接口中所定义的方法,都要用到,那么该选择哪个接口作为“代表”呢?恐怕哪个都是片面的。比如,如果我要在方法对传入的参数做clone操作,那么就必须使用Hashtable作为参数了,因为它还实现了Cloneable接口。
可以说这种时候,就是一个充分的理由,使用类(Hashtable)来声明了吗??