- - PR -
コンスタント値専用クラスについて
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-03-02 12:46
う〜ん、タイプセーフenumって、まだ認知度低いのね。Javaには、enumというキーワードはありませんが、タイプセーフenumという手法で、c/c++のenumよりずっと柔軟に、定数定義が出来ます。最近私は、C++でもタイプセーフenumを使ってるくらいで...
サーチエンジンで検索しても色々解説ページが出てきますが、以下の本を立ち読みしてみるといいですよ。 ピアソンのEffective Java ASCIIの実践Java | ||||
|
投稿日時: 2003-03-02 13:43
こんにちは。
コンパイル時のコンスタント値展開は本当なのでしょうか? テストしてみます。 私はpublic static final使用時にクラスまるごとメモリに ロードされるものだと思っていました。その後使われない場合 はGCにより解放されるのだと思ってました? あとタイプセーフenumはJAVAのデザインパターンとして存在 しているのですね!?とても気になるので本屋に行ってきます。 ちなみにXMLでのプロパティー管理ですが、私も前から実現 したいと思っているのですが、これはDOM、SAX各々の問題点か らするとコンスタント値というよりconfigファイルレベルまで に使用する、というのが私の中での現在の結論です。もう少し 使いやすいものになれば別ですが。 | ||||
|
投稿日時: 2003-03-02 15:14
コンスタント値ですが、
テストしてみました。色々やってみましたがコンパイル時に 展開される様です。 タイプセーフenumですが本屋さんに本がなかったのでWEBを 調べてみたのですが、あまり資料がありません。 こんな感じでしょうか? public class Test1 { private final String a; private final int b; private Test(String a) { this.a = a; } private Test(int b) { this.b = b; } public String stringValue() { return a; } public String intValue() { return b; } public static final Test A = new Test("testa"); public static final Test B = new Test(1); } よくわからないのですが使うメリットはどの様なものでしょうか? | ||||
|
投稿日時: 2003-03-02 15:30
ちょっと違います。簡単に説明しきれるものでもないので、ちゃんとした説明は書籍をあたってみてください。Effective Javaあたりは、Javaをやるなら、買っておいて損は無いと思いますよ。Amazonでも注文できますし。
メリットは、パッと思いつくには、 自動的に管理される。 enumだと、番号定義を、継承クラスで増やしたい場合、結局WM_USERみたいなのを決めて、その後から使おうってなりますが、みんながWM_USER以降を使っちゃったら、それらを一緒に動かす時に番号がぶつかりますよね。タイプセーフenumだと、そのあたりが自動的に管理されるので、ぶつかることがありませんし、コンパイルし直す必要すらありません。 ログの内容の可読性が高まる。 enumだと、結局のところ整数で定義するので、アプリケーションのログには整数しか残りません。なので、その整数が何を意味するのかは、常に、そのログを吐いたアプリケーションと同期したソースコードを見ないと分かりません。タイプセーフenumだと定数自体に文字列表現が入っているので、ログにも文字列表現が残ります。 | ||||
|
投稿日時: 2003-03-03 02:53
列挙は「複数の意味を持つ特殊な(数値や文字列ではないような)型」の定義のために使います。 なので、「システムのコンスタント値」とやらが、画面のタイトル名などの意味のある文字列や、あるいは数値として意味のあるものであれば、列挙を考える必要はないと思います。 | ||||
|
投稿日時: 2003-03-03 04:05
>うのきちさん
>う〜ん、タイプセーフenumって、まだ認知度低いのね。 タイプセーフenumパターンってのがあったんですね。 >タイプセーフenumですが本屋さんに本がなかったのでWEBを >調べてみたのですが、あまり資料がありません。 googleで「typesafe enum java」&「web全体から検索」すると多数ヒットします。 その一つが http://developer.java.sun.com/developer/Books/shiftintojava/page1.html です。もちろん、英語です。WEB上に日本語での資料はありませんね。 | ||||
|
投稿日時: 2003-03-03 11:19
Sunのsubstitutes for missing C constructs or C's enum construncts も読んでみましたが、今の段階では通常のコンスタント値の場合以外のメリット が理解できていません。確かに列挙のコンスタントや機能拡張にはこのパターン を使うのが最適ですね? でも理解しきれていない部分もあるかもしれません。英語なので飛ばし読みし たので・・英語だとどうも全部読む気力がなくなってしまいます。。 | ||||
|
投稿日時: 2003-03-03 11:40
Typesafe enumパターンなら、java.nio.ByteOrderクラスなどで
既に使われています。 # 日本語版APIリファレンスでは「型保証された列挙」と訳されていますね。 Typesafe enumパターンは単体で使用しても十分効果的なパターンですが、 全ての列挙値をCollectionで管理したり、 Strategyパターンなど他のデザインパターンと組み合わせて使うと 非常に便利です。 # エラーコードのようなものの管理は、もはやTypesafe enumパターン # なしには考えられません。 その魅力をこの狭いスペースで伝えることは到底できませんので、 asipさんが紹介されたページや、Effective Javaを一読されることを お勧めします。 | ||||
