2012-02-23 16 views
4

enum型の列挙型のインスタンスが複数ある場合、そのインスタンスに初めてアクセスすると、残りのインスタンスもすべて同時に初期化されます。最初にアクセスしたときにのみ、enumインスタンスを初期化する方法はありますか?enumインスタンスのJava遅延ロード

+0

なぜあなたはそれを望みますか? –

+1

具体的な使用例はありませんが、enumインスタンスを作成するのは高価な場合(インスタンス作成時にDBから何かを読み込む場合)、インスタンスが作成されるとインスタンスを作成するほうが意味がありますを求めました。 – shrini1000

+1

私は非常に特殊なケースがあります。コンピュータビジョンプロジェクトで検索される画像オブジェクトの場合は、列挙型を格納する必要があります。それらは複数回検索される可能性がありますが、アプリケーションと一緒にそれらを初期化したくありません。 –

答えて

8

基本的にはなしではなく、enumはもうありません。 Enums are classes。クラスが初めて使用されると、JVMによってロードされ、静的初期化がすべて行われます。 enumメンバの設定は静的な初期化であるため、すべて初期化されます。

4

使用中にインスタンスを遅延読み込みにすることができます。すなわち、コンストラクタは実際に高価な作業を実行しない。これらの列挙型のメソッドでは、これを必要とするメソッドにcheckingLoaded()メソッドを追加します。これは、それが何であるかに応じてあらゆる方法である必要はありません。

+1

興味深い考えですが、開発者はスレッドの安全性を考慮する必要があります。 –