List <Enum>包含String

Pun*_*cky 4 java

我有一个如下所示的枚举列表 -

List<Status> statusList;
Run Code Online (Sandbox Code Playgroud)

状态定义如下

enum Status { YES , NO , MAYBE }
Run Code Online (Sandbox Code Playgroud)

该清单包含

Status stat = Status.YES;
statusList.add(stat);
Run Code Online (Sandbox Code Playgroud)

我有一个变量

Status statusVar = Status.YES;
Run Code Online (Sandbox Code Playgroud)

我正在尝试比较如下,但它不起作用,因为我猜它是比较参考.以下返回false.你能建议一个解决方案吗?

statusList.contains(statusVar)
Run Code Online (Sandbox Code Playgroud)

编辑:下面是无效的代码.状态是字符串而不是枚举

import java.util.ArrayList;
import java.util.List;
public class Test {
    private enum Status {
        YES , NO , MAYBE
    }


    public static void main (String[] args){

        List<Status> statusList = new ArrayList<Status>();
        String status = "YES";
        statusList.add(Status.YES);

        if(statusList.contains(status)){
            System.out.println(" Yes ");
        } else {
            System.out.println(" No ");
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 5

如果您正在执行包含,则使用包含它将更有效 EnumSet

Set<Status> status = EnumSet.of(Status.YES);
assert status.contains(Status.YES);
Run Code Online (Sandbox Code Playgroud)

但是,List<Status>也会奏效.

你是对的它确实比较了参考,但是如果你有的话,这只会失败

  • 多个ClassLoaders和Class Status实际上是不同的.
  • 您可以创建Status可以使用的新实例Unsafe.allocateInstance(Status.class)

更有可能的是,你没有测试你的想法,而且情况并不完全如你所描述的那样.