ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのSingletonについて。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
javaの初心者でわけのわからない表現が存在するかもしれませんが、
宜しければお答え頂けると助かります。
javaにおける現在最良のSingletonの書き方は、
単一要素のenumを利用する事だとjavaの本を読んで学びました。
確かに、シリアライズなどに対応しているらしく、
素晴らしそうなのですが、そこで疑問がわきました。
enumは、性質から考えて不変であるべきではないでしょうか?
では、不変では無いクラスをSingletonで作りたい時は、
どうしたらより良いのでしょうか?
enumが不変であるべきという点を無視するべきなのか、
従来の方法で、Singleton化するべきなのか…
また、そもそも不変クラス以外をSingleton化したいという
振る舞いがおかしいのか…
ネットや本で、enumのSingletonを調べると、どこも最良と断言しています。
自分には不変クラス以外をSingleton化するのは、
おかしいと断言できませんでした。
かといって、enumで不変ではないクラスを作成しても良いものなのか…
お答え頂けるとうれしいです。
…enumのSingletonなので、厳密には…クラスではないのかもしれませんが…

コメント(5)

どうしてシングルトンが不変であるべきなんでしょう。


不変であるならば最初に一度コピーすればいいだけであって、わざわざシングルトンを参照する意味が全然ない気がします。

不変なシングルトンって結局は単なる定数じゃないですか?
連続で失礼します。

>ネットや本で、enumのSingletonを調べると、どこも最良と断言しています

enumの利点は、メソッドなどに特定の値(例えば「上方向」とか「下方向」とか)を渡したい時にstatic finalで宣言した定数を渡すのは型安全でないけれどenumを渡す事でそれを保証できるって事だと思ってます。

シングルトンが云々というより型安全性の問題でベストな方法という事だと思います。
> tatesukeさん

ご回答ありがとうございます。

最初のご回答に関しては、自分はSingletonが不変であるべきだとは書いていません。
不変であるべきだと思っているのは、enumです。
今回の質問の趣旨は、不変ではないクラスをSingletonで作る可能性は、ありそうなのに、何故不変であるべきであろうenumで実装するのが良いと書かかれているのか。です。

二回目のご回答に関しては、あまり理解出来なかったのですが…
「enumでSingletonを作る理由は、単に型安全であるから」
と言う意見で合っていますか?

わかりにくい質問の書き方になってしまって申し訳ないです。。
私は、解って使う前提であれば、問題なく意図した動きをする方法論は全て
正解なのでは?と考えます。要はちゃんと動くコードになるのが正義。
『どのようにあるべき』などの学術的な思想とか規約なんかは、
ある程度必要だとは思いますが、あまり突き詰めると制限が増え、
コードが柔軟に書けなくなるのでは?トリッキーな方法で無いならば
気軽に使えば良いと思いますよ。

enum での Singleton に関しては、書籍『Effective Java 第2版』なんかでも、
最善な方法と解説されておりますし、従来と比べてより良い方法であるのは
確かでしょう。

けれども、対象オブジェクトに対して、シリアライズをする必要が無く、
リフレクションやらの意図しない操作で private コンストラクタが
呼ばれることも無い状況が事前に開発者の中で解りきっているのであれば、
従来の方法でも、主たる問題の起こる要素が存在しないわけですから、
『極端な状況が無い限り』どちらも結果は変わらない。という話になるかと。
なので、従来の方法でも変わったことをしない限り別段問題無いでしょう。

以上

ご参考になれば幸いです。
> じ〜るさん

ご回答ありがとうございます。

確かにそうですね。
問題が発生していない上に、発生しそうもない事なのにあれこれ考え過ぎました。

自分としては、良さそうな技術なのでどんどん使ってみたかったのですが、いざ使おうとして、あれ?enumって不変であるべきなのでは?と思い固まってしまったわけです。

とりあえず、従来のSingletonに関してはそれなりに使ってみた事があるので、これからはenumのSingletonを使ってみます。
何か問題が起きたら、その時考えて従来のSingletonに戻すなり対策とってみます。

非常に参考になりました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング