正在研读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)来声明了吗??
分享到:
相关推荐
优先考虑接口而不是实现,利用多态性。 适当使用设计模式提升代码复用和可维护性。 集合与数据结构: 根据需求选择合适的集合类型(List, Set, Map等)。 对于并发环境,使用线程安全的集合类如ConcurrentHashMap、...
•一个类可以实现一个或多个接口,继承使用extends关键字,实现接口则使用implements关键字。 实现接口 •一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是...
Qt 类设计原则,内容不多,待续 – 面向接口编程而不是实现 (Code to an interface rather than to an implementation.) – 优先使用组合而非继承 (Favor Composition Over Inheritance)
优先考虑组成而不是继承。 编程到接口,而不是实现。 努力实现交互对象之间的松耦合设计 类应该为扩展而开放,但为修改而封闭。 取决于抽象。 不要依赖具体的类。 最少知识的原则:仅与您的直属朋友交谈。 ...
设计模式实用思想,设计模式的三个重要原则 一,针对接口编程,而不是针对实现编程 二,优先使用对象组合,而不是类继承 三,封装变化点
3、带手控接口,可以使用手控对步进电机进行控制 4、带四路限位开关接口,可对实现限位功能,设备运转安全保证。 5、带继电器控制,可控制雕刻机主轴电机。 插拔接头和驱动器的连接图 1、步进电机的基本参数: ...
第36条 优先提供抽象接口 62 第37条 公用继承即可替换性。继承,不是为了重用,而是为了被重用 64 第38条 实施安全的覆盖 66 第39条 考虑将虚拟函数声明为非公用的,将公用函数声明为非虚拟的 68
基本信息 作者: 臧萌 ...12.2.4 使用接口仅需一步——实现接口 342 12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...
基本信息 作者: 臧萌 ...12.2.4 使用接口仅需一步——实现接口 342 12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...
另外,在前面的比较接口中也可以使用泛型,例如例 3.3 的 MyCmp 类还可以这样来实现, 请看如下语句。 public class MyCmp implements Comparator<Student>{ public int compare(Student s1, Student s2){ …… } }...
优先考虑组成而不是继承。 力争在相互作用的对象之间实现松散耦合的设计。 最少知识的原则:仅与您的直属朋友交谈。 好莱坞原则:请勿致电给我们,我们会致电给您。 坚硬的小号英格尔-责任:一类应该有一个和唯一...
使用说明: 1)调用格式:FxjData2FinData(Market,DataType,FinDataLib) 其中, Market:市场代码,SH为沪市,SZ为深市,BK为板块指数,如果有其它市场数据,可有其它市场代码如HK等. DataType:数据类型,dm,cq,cw0,hq0,hq,等等...
GO是一个以通用系统语言为设计目标的系统级语言, 如 C++. 以下是针对C++程序员的一些学习拉摘要. 这文章主要讨论GO和C++的不同。 对于更一般的介绍,请另参... * Go 使用nil而不是C++中的NULL或0作为逻辑非。
API概述cl-webkit API紧随WebKit2 API,不同之处在于,在同时提供基于类的接口而不是功能接口的情况下,它们优先于功能接口。 也就是说*_{new,get,set}排除*_{new,get,set}方法,以使用make-instance和插槽访问器。 ...
- 优先使用对象组合而不是继承。 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...
但本例中公司不是使用一个简单的 We b服务 器,而是使用一组 We b服务器,其 I P地址从1 9 8 . 5 0 . 1 . 1到1 9 8 . 5 0 . 5 0 . 1 0 0。在本网段中不再使用 其他的I P地址。我们希望使用 T C P拦截来保护所有...
抬头设计模式抬头设计模式书练习。SymUDuck策略模式定义一系列算法,... 优先考虑组成而不是继承。 编程到接口,而不是实现。 力争在相互作用的对象之间实现松散耦合的设计。 类应该开放以进行扩展,但封闭以进行修改
指导原则: SQL查询是以静态方式指定的,其中没有用户数据可以污染它们(即Java批注) 使用具有命名字段和类型字段的Java类(而不是冗长且易于出错的反射接口)将参数和结果(未)编组在一起优先选择编译时间,然后...