Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Since enums <em>are</em> classes and thus <em>can</em> implement interfaces, you could create an interface which holds your contains() method and then implement that method on your enums, then use a generic method which takes a class token of a specific enum type implementing that interface (and which could be set at runtime) to test. Something like this:</p> <p><strong>CanBeTestedForContains:</strong></p> <pre><code>public interface CanBeTestedForContains { boolean contains(String name); } </code></pre> <p><strong>ColorEnum:</strong></p> <pre><code>import java.util.HashSet; import java.util.Set; public enum ColorEnum implements CanBeTestedForContains { R("red"), B("blue"); private static Set&lt;String&gt; names = new HashSet&lt;String&gt;(3) { { for (final ColorEnum e : ColorEnum.values()) { add(e.name); } } }; private String name; private ColorEnum(final String name) { this.name = name; } @Override public boolean contains(final String name) { return names.contains(name); } } </code></pre> <p><strong>SuitEnum:</strong></p> <pre><code>import java.util.HashSet; import java.util.Set; public enum SuitEnum implements CanBeTestedForContains { D("diamonds"), H("hearts"), C("clubs"), S("spades"); private static Set&lt;String&gt; names = new HashSet&lt;String&gt;(3) { { for (final SuitEnum e : SuitEnum.values()) { add(e.name); } } }; private String name; private SuitEnum(final String name) { this.name = name; } @Override public boolean contains(final String name) { return names.contains(name); } } </code></pre> <p><strong>ContainsSelectorTest:</strong></p> <pre><code>public class ContainsSelectorTest { private static &lt;E extends Enum&lt;E&gt; &amp; CanBeTestedForContains&gt; boolean contains(final Class&lt;E&gt; enumClass, final String name) { return enumClass.getEnumConstants()[0].contains(name); } public static void main(final String[] args) { if (contains(ColorEnum.class, "red")) { System.out.printf("%s contains %s\n", ColorEnum.class, "red"); } if (contains(SuitEnum.class, "hearts")) { System.out.printf("%s contains %s\n", SuitEnum.class, "hearts"); } if (contains(SuitEnum.class, "red")) { System.out.println("This shouldn't happen."); } else { System.out.printf("%s DOES NOT contain %s\n", SuitEnum.class, "red"); } } } </code></pre> <p><strong>Output:</strong></p> <blockquote> <p>class ColorEnum contains red</p> <p>class SuitEnum contains hearts class</p> <p>class SuitEnum DOES NOT contain red</p> </blockquote>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload