私がインターフェースを持っているとしましょう...
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であり、そこから先に進む方法がよくわかりません。私は巨大なデータセットを扱っているので、パフォーマンスが重要です。
ありがとうございました。