配列からのEnumSet、最短のバリアント?質問する

配列からのEnumSet、最短のバリアント?質問する

配列からのが必要ですEnumSet(これは varargs メソッド パラメータを通じて与えられます)。まず、 には varargs コンストラクタ メソッドがないことに驚きましたEnumSet( はありますEnumSet#of(E first, E... rest))。回避策として、次のバリアントを使用しました。

EnumSet<Options> temp = EnumSet.copyOf(Arrays.asList(options));

ただし、これにより がトリガーされますjava.lang.IllegalArgumentException: Collection is empty。そのため、次のような結果になりましたが、これはややばかげているように見えます。

EnumSet<Options> temp = options.length > 0 ? 
                        EnumSet.copyOf(Arrays.asList(options)) : 
                        EnumSet.noneOf(Options.class);

もちろん、これを何らかのユーティリティ メソッドに移動することもできますが、それでも、既存のメソッドを使用するより簡単な方法があるかどうか自問しています。

ベストアンサー1

これは 2 行ですが、少しだけ複雑ではありません。

EnumSet<Options> temp = EnumSet.noneOf(Options.class); // make an empty enumset
temp.addAll(Arrays.asList(options)); // add varargs to it

必要なコンストラクターを持たないクラスの他の種類の変数宣言よりも、これが悪いとは思いません。

    SomeClass variable = new SomeClass(); // make an empty object
    variable.addStuff(stuff); // add stuff to it

おすすめ記事