1

私がインターフェースを持っているとしましょう...

public interface Feature
{
    public abstract void doSmth();
}

...およびそのインターフェイスを実装する複数の列挙型:

//最初の列挙型

public enum FeatureA implements Feature
{
    A1
    {
        @Override public void doSmth() { System.out.println("A ==== A1"); }
    },

    A2
    {
        @Override public void doSmth() { System.out.println("A ==== A2"); }
    };

    @Override public abstract void doSmth();
}

//2番目の列挙型

public enum FeatureB implements Feature
{
    B1 
    {
        @Override public void doSmth() { System.out.println("B ==== B1"); }
    },

    B2
    {
        @Override public void doSmth() { System.out.println("B ==== B2"); }
    },

    B3
    {
        @Override public void doSmth() { System.out.println("B ==== B3"); }
    };

    @Override public abstract void doSmth();
}

//および機能を実装する他の多くの列挙型

ここで、このような列挙型定数の名前に対応する文字列のセットを組み立てるとします(これはサードパーティのコードに必要です)...

Set<String> singleEnum = new LinkedHashSet<String>();
singleEnum.add("A2");
singleEnum.add("A1");

...そして後で、そのようなセットの各文字列を列挙型定数に変換してから、doSmth()メソッドを適用する必要があります。singleEnumにはFeatureA定数の名前のみが含まれているため、この場合はvalueOf(String)メソッドを適用できます。

for (String s : singleEnum)
{
    FeatureA.valueOf(s).doSmth();
}

しかし、セット内の文字列がさまざまな列挙型定数に対応している場合はどうなるでしょうか。例えば:

Set<String> multipleEnums = new LinkedHashSet<String>();
multipleEnums.add("A1");
multipleEnums.add("B2");
multipleEnums.add("A2");

私はこのようなことをしたいと思います:

for (String s : multipleEnums)
{
    Feature./* convert s to the correct enum */.doSmth();
}

それを行う簡単な方法はありますか?EclipseがFeatureに適用できる唯一のメソッドはFeature.classであり、そこから先に進む方法がよくわかりません。私は巨大なデータセットを扱っているので、パフォーマンスが重要です。

ありがとうございました。

4

2 に答える 2

3

すべての列挙型の名前でマップを作成できます

static final Map<String, Feature> map = ...
static <F extends Enum & Feature> void addEnums(F... features) {
    for(F f: features)
       map.put(f.name(), f);
}

addEnums(FeatureA.values());
addEnums(FeatureB.values());
于 2012-08-11T12:30:54.510 に答える
0

それを行う簡単な方法はありますか?

私はそうは思わない。列挙型が1つだけの場合は、列挙型の静的valueOfメソッドを使用して変換を行うことができます。ただし、複数の列挙型を使用する場合は、それぞれを呼び出す必要があります...そしてIllegalArgumentExceptionsに対処します。

Map<String, Feature>すべての列挙値のを作成して入力することに頼らなければならないと思います。

于 2012-08-11T12:31:40.580 に答える