[Effective Java 读书笔记] 第7章 方法

第39条 必要时进行保护性拷贝

对于可变类,如果作为参数传入到自己的类里,并作为自己类的数据使用存储时,需要进行保护性拷贝,比如Date是可变的,如果传入一个Date类,最好做一个保护性拷贝,以免在调用完Period后,外面将传入的参数start进行更改,影响自己类的this.start:

public Period(Date start)
{
    this.start = new Date(start.getTime());        
}

同理,如果是作为返回对象,也需要做返回的保护性拷贝

public Date start()
{
     return new Date(this.start.getTime());  
}

 第41条 慎用重载

类中方法的重载,如果只是参数类型不同,其他都相同,那么可能出现问题。因为重载方法是在编译时决定调用哪一个的,而编译时不能像运行时那样向下转型获得真实的对象类型:

public class CollentionClassifier{
public static String classify(Set<?> s){
}
public static String classify(Collections<?> s){
}
public static void main(String[] args){
    
Collection<?> cll = new HashSet<String>();
classify(cll);//因为编译时决定重载方法的调用,而编译时只知道Collection,不知道它是Set类型,所以会走到Collection参数的方法中
}

而方法的覆盖就是动态的,就是子类覆盖父类的方法,使用对应的对象实例调用方法,会调用到自己类中的方法。

安全的方法,是不要使用两个具有相同参数数目的重载方法,甚至可以尽量避免重载方法的使用,使用readBoolean(),readInt()这样的方法

posted @ 2015-11-03 23:17  jiangz222  阅读(152)  评论(0)    收藏  举报