`
yanghuidang
  • 浏览: 915479 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Effective Java 读后感

 
阅读更多

1 JavaBean和 Builder模式应用场景是多个参数,而且可选部分时的对象构造,此时一般做饭是跌罗汉式的构造器声明,但是这样代码不够清晰也不简洁。

2 避免方法重载的意思是说避免相同参数,而且相同参数容易混淆的情况,例如假设都有一个参数,而且一个是int,一个是Integer,再如一个是Object,一个是数组;如果非要这么做,比如是升级程序时,改不了设计了,则可以让他们调用同一个处理逻辑。避免简单类型装换后就可以获得的重载方法。

消除此类重载最好的方法是重命名。而对于静态方法而言,可以用静态方法取代构造器,这样更清晰。

3 三十七条: 构造器中绝不定调用可被覆盖的方法。除非为继承而设计的API文档,否则不要暴露实现细节。

4 七十四条: 当父类没有实现Serializable接口的前提下, 子类如果需要序列化,父类必须提供无参构造器,以便反序列化,且此时不会自动序列化或者反序列化父类,如果逼着用户使用无参,正常势必多一些无用数据,那么可以用文中所有方法,在父类中抽出可传参数的一个初始化方法initialize(x,y,z), 覆盖子类的readObject来手工反序列化,并调用initialize().

(1)如果父类实现了Serializable接口,子类将自动得到可序列化特性。并且序列化子类时,父类的writeObject()和readObject()将得到调用。换言之,在序列化子类之前,父类将会自动被序列化。

(2)当父类没有实现Serializable接口的前提下,序列化子类时父类将不会被自动序列化。而反序列化子类时,父类的无参数构造方法将会被调用。

(3)如果想在序列化子类的同时也自动序列化父类中的字段,必须在子类的writeObject()和readObject()中相应实现。

所以记住一句话:为继承而设计的类,如果目前不需要序列化,那么最好提供一个无参构造器,因为或许以后它的子类需要序列化操作。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics