第64条 通过接口引用对象
1.如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,就都应该使用接口类型进行声明
2.使用接口会使程序更加灵活,体现在可以随时用更优的实现替换老的实现。
3.如果没有合适的接口存在,完全可以用类而不是接口来引用对象
不使用接口的情况:
1.原实现提供了特殊功能,且不是这个接口的通用约定所要求的。
2.对象属于一个框架,而框架的基本类型是类,不是接口
3.类实现了接口但它也提供了接口中不存在的额外方法
总的来说能用接口就使用接口,如果没有适合的接口,就用类层次结构中提供了必要功能的最小的具体类来引用对象。
第65条 接口优先于反射机制
反射机制使对类的使用更加灵活,但也存在不少缺点:
1.失去编译时类型检查的好处,包括异常检查。
2.执行反射访问所需的代码很长。
3.性能上的损失。
如果只是以非常有限的形式使用反射机制,虽然也要付出少许代价,但是可以获得许多好处 。对于有些程序,它们必须用到在编译时无法获得的类,但是在编译时存在的适当的接口或者超类,通过它们可以引用这个类。如果是这种情况,你可以通过反射方式创建实例,然后通过它们的接口或者超类,以正常的方式访问这些实例 。
思考:1.反射的性能损失是一个关注点,写反射时需要思考是否存在大量调用,如果存在,需要看下性能损失是否可以接受。
2.反射代码可读性差,维护更加麻烦,更容易出现bug。
3.反射无法在修改类后,通过IDE直接找到所有引用点。
总的来说能不用反射就不要用。