2016-11-06 5 views
-2
enum Expression { 

    Good("good"), 
    Bad("bad");  

    private String name; 
    Expression(String str) { 
     this.name = str; 
    } 

    public String getName(){ 
     return name; 
    } 
} 

「素晴らしい」、「非常に良い」、「良い」という表現で同じ「良い」を使用することも可能ですこれらのバリエーションには同じExpressionでアクセスできます。グッド?それは奇妙に聞こえるかもしれませんが、可能であれば実際には役に立ちます。可能でない場合の回避策はありますか?enum要素がJavaで1つ以上の値を取ることができます

私の意図でどのように使用するのですか?ここに:その後、

String str = "great"; 
String str2 = "good"; 

私は両方に該当するとします

If(Expression.Good.getName().equals(str)) { 
    // I want it to be true! 
    } 


    If(Expression.Good.getName().equals(str2)) { 
    // I want it to be true too! 
    } 
+1

[複数値の型を持つJavaの列挙型]の可能な重複(http://stackoverflow.com/questions/19600684/java-enum-with-multiple-value-types) – Dez

+1

あなたが好きなパラメータを持つことができます。 – SLaks

+2

あなたがここで何を望んでいるかは不明ですが、「良い」、「良い」、「非常に良い」、「良い」という値と異なる「Expression.Good」はどうでしょうか? –

答えて

-1
public enum Expression { 

    GOOD(Arrays.asList("Good", "Great", "Wonderfull")), 
    BAD(Arrays.asList("Bad", "Terrible"));  

    private final List<String> name; 
    private Expression(final List<String> str) { 
     this.name = str; 
    } 

    //Will return a immutable list with all the names 
    public final List<String> getName(){ 
     return name; 
    } 

    //Checks if the value has that name 
    public boolean hasName(String n) { 
     return name.contains(n); 
    } 
} 
1

私は可変引数を使用します。

enum Expression { 

    POSITIVE("Good", "Great", "Awesome"), 
    NEGATIVE("Bad", "Get out"), 
    ; 

    private final String[] words; 

    private Expression(String... words) { 
     this.words = words; 
    } 

    public String getRandomWord() { 
     return this.words[ThreadLocalRandom.current().nextInt(this.words.length)]; 
    } 

    public boolean matches(String word) { 
     //can also use HashSet, and potentially consider matching against lowercase 
     return Arrays.stream(this.words).anyMatch(word); 
    } 
} 

は私の意見では最もクリーンな構文だろう、とのことができます。 varargs配列をSetまたはListに入れると、ここに柔軟性があります。

if (Expression.POSITIVE.matches("Great")) { 
    //Great! 
} 
+0

@MickMnemonic 'HashSet'は' O(1) 'が含まれているので、そのための最良のケースです。しかし、これはenum構造のバリエーションを示すことに過ぎません。 – Rogue

+0

申し訳ありませんが、私はあなたの 'matches()'実装に気づきませんでした。はい、ここで「セット」がうまくいきます。 –

関連する問題