2013-02-01
关于超链接的妙用:
<a href="javascript:void(0)" onclick="xxxxxxxx()"/> 这种方法的好处是页面上看不到你实际调用的方法或者跳转的页面
关于equals()重写
equals()约定 |
|
不需要改写默认equals()方法的情况 |
|
1 |
一个类的每个实例本质上是唯一的,本来就符合默认equals()的含义,根据是否引用同一对象来判断。 如:Thread类 |
2 |
不需要提供“逻辑相等”的测试功能。 如:Random类, |
3 |
超类已经改写了equals()方法,此方法子类也适用。 如:AbstractList和ArrayList |
4 |
一个类私有的,其equals()方法永远不会被调用(若为了防止会用到最好也要检查是否适合重写) |
需要改写默认equals()方法的情况, |
|
1 |
一个类有自己的“逻辑相等”,而且超类也没有改写equals()方法 |
2 |
通常这适用于“值”类,如:Integer、JavaBean等。 |
改写equals()方法的约定 |
|
1 |
非空性、自反性、传递性、一致性、对称性 public boolean equals(Object obj) { if(obj==this) return true; if(!(obj instanceof ThisClass)) return true; ThisClass to=(ThisClass)obj; //对每个关键域进行比较,注意引用类型的Null值,也要考虑到 } "instanceof"操作符的使用非常简单,它用两个参数来完成其功能。
|
2 |
改写了equals()后也要相应的改写hashcode() |
3 |
对于以下情况要特别考虑到: 当扩展一个可实例化的类的同时,既要增加新的特征,同时还要保留equals约定,要完全实现上面的约定是做不到的。 优化:将扩展改为复合,父类作为子类的一个属性,子类的equals中父类型属性用父类的equals方法比较。 并在子类中提供一个方法返回其父类视图,以便需要把它当做父类时能用的到。 |
|
注意:一个抽象类的子类中增加新的特性,不会违反equals约定。因为抽象类不可能创建实例。 |