質問: 5; } 最も高速でエレガントなソリューションは何ですか?
回答: values().lengthを使用すると、呼び出すたびに配列の新しいコピーが作成されます。この無意味なコピーを避けるために、自分でlist(または必要に応じてセットまたはマップ)を作成することがあります。 i would n'tしかし、それをハードコーディングします...サイズだけが必要な場合、私はただ使用します:_private static final int size = configuration.values().length; _最後に。評価されるまでに、すべての値が初期化されています。これにより、dryおよび他の回答で生じる不一致の懸念が回避されます。もちろん、これはそれ自体が少し最適化されています...しかし、最終的にsimpler codeで終わるもの、imoです。他の場所からvalues().lengthを呼び出しても、興味のあることは表明されません。これはjust enumのサイズです。値の配列から取得するという事実は偶発的で注意散漫なimo。values()を使用する代わりにenumset.allof().size()を使用することもできます。これは、小さな列挙型ではかなり安価になりますが、sizeフィールドがあるほど読みやすくはありません。