ArrayUtils.contains为已存在的字符串返回false

时间:2017-02-09 12:43:40

标签: java arrays

为什么我的OUTPUT显示NOOOO?

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");
        }



    }
}

输出: NOOOO

1 个答案:

答案 0 :(得分:9)

因为enum不是String

您有一组enum个实例,但您正在搜索Stringequals()永远不会enum

使用:

UserRole.valueOf(str)

并捕获IllegalArgumentException,当字符串与实例不匹配时抛出。{/ p>

您的大多数枚举类都可以删除:

  • 根本不需要name字段。每个枚举都有一个.name()方法,它将枚举实例名称作为字符串
  • 返回
  • 每个枚举类都有一个.values()方法,它将所有实例作为数组返回