2017-02-09 5 views
2

なぜOUTPUTがNOOOOを表示していますか?ArrayUtils.containsは文字列がすでに存在する場合にfalseを返しています

UserRole.java

public enum UserRole { 
    ROLE_X("ROLE_X"), // 
    ROLE_Y("ROLE_Y"), // 
    ROLE_Z("ROLE_Z"), // 
    OTHER_X("OTHER_X"), 
    OTHER_Y("OTHER_Y"), 
    OTHER_Z("OTHER_Z"); 


    private final String name; 

    private UserRole(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public boolean hasName(String name) { 
     return this.name.equals(name); 
    } 

    public static UserRole[] ROLES = { ROLE_X, ROLE_Y, ROLE_Z }; 
    public static UserRole[] OTHER = { OTHER_X, OTHER_Y, OTHER_Z }; 

} 

TestCode.java

import java.text.ParseException; 
import org.apache.commons.lang.ArrayUtils; 

public class TestCode{ 
    public static void main(String[] args) throws ParseException { 

     String name = "ROLE_X"; 

     if(ArrayUtils.contains(UserRole.ROLES, name)) { 
      System.out.println("---ROLES---"); 
     } else { 
      System.out.println("NOOOO"); 
     } 



    } 
} 

OUTPUT: NOOOO

+3

名前は 'STRING'、ではない配列としてすべてのインスタンスを返す.values()方法を持っているとして列挙インスタンス名を返す.name()方法を持っています' UserRole' –

+1

あなたは 'ArrayUtils.contains'を正しく使用していません。 –

+0

次に、私の文字列が列挙型のUserRole.ROLESであるかどうかをチェックする方法は? –

答えて

9

enumStringではありませんので。

あなたはenumインスタンスの配列を持っていますが、enumequals()になることはありませんString、探しています。

使用:文字列がインスタンスと一致しない場合にスローされる

UserRole.valueOf(str) 

とキャッチIllegalArgumentException、。


あなたの列挙型クラスの大部分を削除することができます。

  • あなたがすべてでnameフィールドを必要としません。すべての列挙型は、文字列
  • すべての列挙型クラスは、このケースで
+0

次に、私の文字列が列挙型のUserRole.ROLESであるかどうかをチェックする方法? –

+0

'UserRole.valueOf()'を使ってください - 編集された答えを参照してください – Bohemian

+0

私はまた私が使うことができることを発見しました: 'if(ArrayUtils.contains(UserRole.values()、UserRole.valueOf(name))){'それはより正確ではありませんか? –

関連する問題