[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10226] Re: Effective Java 読書会 3 回目議事録



 こんばんは。山本です。
>
> ◆項目21
>    enum type はC#は持っている
>
 仕事帰りの地下鉄で、JavaPress Vol,25
を読んでたら、「Javaちょこっとテク!」
というコーナーでtypesafe enum の
長所と短所について書かれていました。

ちなみに下記はそこでのサンプルコードです。
public class Suit{
  private Suite() {}
  public static fainl Suite CLUB = new Suite();
  public static fainl Suite DIAMONDS = new Suite();
  public static fainl Suite HEARTS = new Suite();
  public static fainl Suite SPADES = new Suite();
}
これだけでもいいと思うと、typesafe enum ってすごいと思う。

>
>    「不思議と管理されている」名前空間とは?? 意味不明
>   結局 enumではなくて名前解決でいく(つまりtype safe enum)
>
  typesafe enum の長所についてはEffective Javaに散々
書いてあるから省略しますが、typesafe enum の問題点は、
列挙型としての機能をクラス変数による一意性に頼ってることだそうです。

 必要ならreadResolve()を実装しなければいけないし、
Servlet/JSP/EJB/RMIのような複数のクラスローダーからロード
されてしまうクラスは、違う名前空間を持ってしまうので、
クラス変数の一意性が破綻してしまうから使えないそうです。
(equals()を実装すれば解決するけど、それだと
typesafe enumの価値があまりない)

 この記事の著者は、普通のクラスで設計しても、
同様の処理は出来るので(Stateパターン?)
enumやtypesafe enum は無理に使わない方が良い
と結論づけてました。

追記
 ・・・ってことは、
ServletやEJBではSigletonパターンは使えないの!?