Effective Java
democreen
java 研发
展开
-
Override equals Code
我想告诉自己的是:对于所有对象都通用的方法 equals,需要重构。根据每一个对象特殊的业务判断,我们需要重构这些通用的方法。因为底层的equals实际上并不满足我们,有的时候,调用后,并不知道里面的真实结果。Democreen cis = new Democreen("Polish"); String s = "polish"; System.原创 2015-11-30 16:01:23 · 484 阅读 · 0 评论 -
复合优先于继承
你会遇到这种情况么:A'类继承A类A‘重写 父类A的a1,a2方法 a1’,a2‘但是 A类中的a1是基于a2方法去实现的。如果a1’调用父类A类的a1方法,那么就会继续调用到a2方法, 用于A‘继承A重写了a2方法,间接的调用了a2’ 方法。a1‘与a2’间的业务关联,导致 A‘类属性值重复变更。源码如下:InstrumentedHa原创 2015-12-03 12:07:16 · 1590 阅读 · 0 评论 -
类层次优于标签类
碰见标签类,要想着怎么去重构,养成一个好的习惯。===========================================================什么是类层次?什么是标签类?土的理解方式: 类层次:根类,超类,子类,考虑结构层次,我也不知道怎么说,“高内聚,低耦合,结构清明”。什么是标签类,一个类中有许多样板代码充斥在一个单类中,破坏可原创 2015-12-03 16:10:05 · 711 阅读 · 0 评论 -
考虑实现Comparable接口
我们重写实现compareTo 实现自己的需求。为什么重写?原来的compareTo是空方法体, 很多类已实现该接口,目的就是为了排序,通过什么排序,这就根据自己的业务逻辑了。比如:public final class PhoneNumber implements Cloneable, Comparable {... public static void原创 2015-12-02 15:31:36 · 2188 阅读 · 0 评论 -
使类和成员的可访问性最小化
package-private(包级私有的),public (公有的)-----如果类或者接口能够被做成包级私有的,它就应该被做成包级私有的,它实际上是包的实现的一部分,而不是这个包导出api的一部分,它的修改,替换,或删除,不需要担心影响到现有的客户端程序。除非你把它做成公有的,那么你就要有责任的永久的支持它,保持它的兼容性。原创 2015-12-02 16:35:00 · 674 阅读 · 0 评论 -
在公有类中使用访问方法而非公有域
公有类永远都不应该暴露可变的域。怎么样使得共有类暴露不可变的域,减小其危害性,有时候会需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是可变还是不可变的。原创 2015-12-02 17:08:41 · 938 阅读 · 0 评论 -
覆盖equals时总要覆盖hasCode
覆盖equals时总要覆盖hasCode在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。如果不这样做的话,违反Object hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap,HashSet,Hashtable。例如:import java.util.*;public final class Ph原创 2015-12-01 16:35:46 · 576 阅读 · 0 评论 -
谨慎的覆盖clone
Stack.java源码: import java.util.Arrays;public class Stack implements Cloneable { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY =原创 2015-12-02 13:46:16 · 606 阅读 · 0 评论 -
始终要覆盖toString
实例代码Object.java中 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }PhoneNumber.java如下// Adding a toString method to PhoneNumber - page 5原创 2015-12-01 17:01:49 · 910 阅读 · 0 评论 -
Log4j---Why You Should Use “isDebugEnabled” ?
使用log4j,common-log时,发现很多代码中这样写 if (log.isDebugEnabled ()) { log.debug( "xxxx "); } 我很奇怪,为什么要与log.isDebugEnabled ()?既然log.debug()在没有指定输出级别为DEBUG时不会有输出,为什么还要在前面加一个isDebugEnabled ()的判断?原创 2011-04-08 13:35:00 · 1199 阅读 · 0 评论