2013-07-22 10 views
8

私はシナリオを列挙して読んで実装していました。私は、インスタンスなしで列挙型 を作成できるとわかりました。そのようなEnumの実用は何ですか?第2に、Enumは インターフェイスを実装することもできますが、明らかにクラスを拡張することはできません。既にクラスEnumを拡張しています。インスタンスなしでEnumを作成することの実際的な利点は何ですか? ベンインスタンスなしで列挙型を作成する方法は何ですか?

+0

ああそう。しかし、多くのインタビュアーがこの質問をしています。何もない場合、なぜJavaの人々はそれを許可しますか?どこかに使用されているかもしれませんが、私たちはそれについて認識していません。 – benz

+0

参照:http://stackoverflow.com/a/14900526/829571 – assylias

答えて

10

ゼロ部材列挙は、実際にはJavaコミュニティの特定のセグメントで使用ユーティリティクラスイディオムである(特に、Peter Lawrey)。それらは最も簡潔で、おそらくクラスがインスタンス化されないか、サブクラス化されないことを保証する最もクリーンな方法です。

もちろん、インスタンスのような列挙型のメソッドはありません。静的なものだけです。

+4

このようなことがどこで行われたかの例を挙げることはできますか?普通のクラス(例えば 'java.lang.Math')が使われている場所はたくさんありますが、これを見たことはないと思います。 – arshajii

+3

しかし、それはjavadocの 'enum'セクションに現れますが、javadocを探す必要はありません。最終的な(分かりやすくするために)class + privateコンストラクタは、そのようなユースケースの標準的なイディオムです(機能的には同等ですが)。これは通常、JDK(8を含む)で行われます。 – assylias

+1

@arshajii「数学」は古すぎて「enum」ではありません。 –

0

メンバーが必ずしも宇宙の果てまで固定されていません。あなたは、だから私はenumが作成されていることを想像することができます。バイナリ比較可能性を壊すことなく、新しいメンバーを追加することができます現時点では何のインスタンスを持っていないが、いくつかは後から追加したことがあり、いくつかの概念をモデル化する。

は、enumが、我々は間違いなくすべてのインスタンスを持つことはありませんでしょうか?たとえばenum NegativeNaturalNumber{}のために?でした知っている概念のために作成することも可能ですそれはプログラムの目的を果たしているのですか?誰が知っていますか、私たちは確信をもって言えません。

関連する問題