您的位置:首页 > Web前端

Effective Java 中文版第二版的读书心得(一)

2009-03-10 08:33 405 查看
虽然只看到了不到100页,但收获还是很多的。

首选很感谢Joshua Bloch写的这本书,当然更感谢我们的司令翻译。至少目前我看到的100页的内容,基本没发现翻译很别扭的地方,包括错别字也没有发现,至少没有影响到我对书中内容的理解。再次感谢。

在后面的读书心得里,我会根据我的个人理解,将书中的各个知识点逐个和大家分享。 书中的一些观点我也不是完全赞同的,呵呵(估计是我的水平不够,呵呵呵)。

我们先看全书第一个问题:考虑用静态工厂方法代替构造器。

也就是,不再使用 new ()这种方式来获得一个类的实例,而是通过工厂方法获得。
优点:
1 有名字
这个我体会还是比较深的,在JDK里,我见过一个类的最多的构造器数量,有16个。大家可以看看 java.math.BigDecimal 这个类就知道了。
就算一个类的构造器有4个左右,我想你很可能在使用的时候会极其注意,不要选错了到底是用哪一个。

所以,如果能提供一个很好命名的方法来实现构造类,确实是一个不错的主意,比如

BigDecimal.getInstanceFromString(...); 我想这个名字虽然有点垃圾,但要表达的意思确实异常的明确。

在一些第三方的库里面,这种情况更加突出。我许多时候不得不看看API文档,来区分我的那个int参数到底是使用三个参数的构造器,还是使用四个参数的构造器。因为他们太像了。

2 可以单例
这个就不用说了,你可以在方法里干你要做的任何事情,而new绝对会给你一个新的实例。

3 可以返回任何子类型。
这个对于系统的扩展是很有用处的。new 已经决定了你肯定要这个类,而静态方法却可以修改,不一定肯定返回你方法所在的类,可以在必要时替换为一个子类。

4 代码简便
这点我体会不深,呵呵
不过这个写法我确实经常用
List<String> list = new ArrayList<String>();
后面的那个ArrayList<String>里面的 String就是一个例子吧。不过我倒是不是很在意这个,因为我很喜欢这样写了。
下面这个例子看上去确实不错。呵呵!
public class Test<K, V> extends Thread {
  public static void main(String[] args) {
    Test<String, String> te = Test.newInstance();
  }
  public static <K, V> Test<K, V> newInstance() {
    return new Test<K, V>();
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: