これは、以前の方法のすべてのアプローチを組み合わせたものであり、同等のパフォーマンスが得られます。任意の列挙型に使用でき、@ Richard Hの「編集」ソリューションをインライン化し、@ bestsssなどの無効な値には例外を使用します。唯一のトレードオフは、クラスを指定する必要があるということですが、これにより2行になります。
import java.util.EnumSet;
public class HelloWorld {
static enum Choices {a1, a2, b1, b2}
public static <E extends Enum<E>> boolean contains(Class<E> _enumClass, String value) {
try {
return EnumSet.allOf(_enumClass).contains(Enum.valueOf(_enumClass, value));
} catch (Exception e) {
return false;
}
}
public static void main(String[] args) {
for (String value : new String[] {"a1", "a3", null}) {
System.out.println(contains(Choices.class, value));
}
}
}