《Effective Java 2》读书笔记:第33条:用EnumMap代替序数索引

2009年4月4日

Effective Java 2

读到相和相变那个例子的时候,我自然想到一个问题:为什么不用Map<Map<Phase,Phase>,Transition>这样的结构来表示相和相变之间的关系?

细心地看一下,SOLID,LIQUID,GAS三个相根据排列组合能构成六个相变。但是,它们两两组成一个Map,却只能组成三个相变,因为键只有三个,不可能有诸如<SOLID,LIQUID>和<SOLID,GAS>这样的Map同时存在。所以,这个结构是不能用的。有一个例外,如果只有两个相,比如SOLID和GAS,则它两的排列组合与能够形成的Map个数碰巧是相等的,都是两个。这个情况过于特殊,很少会碰上,还是不用为妙,况且书中使用的结构才具有一般性。

阅读全文…

《Effective Java 2》读书笔记:第32条:用EnumSet代替位域

2009年4月3日

Effective Java 2

勘误:

  1. If the elements of an enumerated type are used primarily in sets, it is traditional to use the int enum pattern (Item 30), assigning a different power of 2 to each constant:
    如果一个枚举类型的元素主要用在集合中,一般就使用int枚举模式(见第30条),将2的不同倍数赋予每个常量:

    正确的翻译:如果一个枚举类型的元素主要用在集合中,一般就使用int枚举模式(见第30条),将2的不同次幂赋值给每个常量:

《Effective Java 2》读书笔记:第31条:用实例域代替序数

2009年4月2日

Effective Java 2

利用枚举常量的序数来做一些事情,比如排序,看似是个很不错的办法,因为枚举常量天生带有一个序数值。可细想就会发现这个天生的优势,弄不好就成了劣势。比如,你想对一个已有枚举增添新的常量,而新常量偏偏不是放到已有常量的末尾。问题就出来了,客户端代码很可能与原来的序数紧密相关,很难修改!

阅读全文…

《Effective Java 2》读书笔记:第30条:用enum代替int常量

2009年4月1日

Effective Java 2

勘误:

  1. Before enum types were added to the language, a common pattern for representing enumerated types was to declare a group of named int constants, one for each member of the type:
    在编程语言还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具名的int常量,每个类型成员一个常量:

    阅读全文…

《Effective Java 2》

2009年3月22日

effective-java-2

同事极力推荐的一本书,理由是Java之父James Gosling做过这样的评价:

“I sure wish I had this book ten years ago. Some might think that I don’t need any Java books, but I need this one.”

“我很希望10年以前就拥有这本书。可能有人认为我不需要任何Java方面的书籍,但是我需要这本书。”

阅读全文…

分类: Java 标签: