我有一个如下所示的枚举列表 -
List<Status> statusList;
状态定义如下
enum Status { YES , NO , MAYBE }
列表包含
Status stat = Status.YES;
statusList.add(stat);
我有一个变量
Status statusVar = Status.YES;
我正在尝试比较如下,但它不起作用,因为我猜它是比较参考。以下返回false。你能建议一个解决方案吗?
statusList.contains(statusVar)
编辑:以下是无效的代码。状态是字符串而不是枚举
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 ");
}
}
}
答案 0 :(得分:5)
如果您正在执行包含,则使用EnumSet
Set<Status> status = EnumSet.of(Status.YES);
assert status.contains(Status.YES);
但是,List<Status>
也可以。
你是对的,它确实比较了参考,但是如果你有
,这只会失败Status
实际上是不同的。Status
Unsafe.allocateInstance(Status.class)
的新实例
更有可能的是,你没有测试你的想法,而且情况与你所描述的不完全相同。
答案 1 :(得分:2)
private enum Status {
YES , NO , MAYBE
;
public Status getByName(String name){
for (Status st : Status.values()) {
if (st.toString().equals(name)){
return st;
}
}
return null;
}
}
试试这个!
答案 2 :(得分:1)
您可以添加一个函数toString()并包含()作为帮助程序:
private enum Status {
YES("Yes") , NO ("Yes") , MAYBE("Yes");
private final String label;
/**
* Instantiates a new Status.
* @param label the label
*/
private Status (final String label) {
this.label = label;
}
@Override
public String toString() {
return label;
}
public static boolean contains(final String test) {
for (final Status value : Status.values()) {
if (value.toString().equals(test)) {
return true;
}
}
return false;
}
}
答案 3 :(得分:0)
enum Status { YES , NO , MAYBE }
public static void main(String[] args) {
List<Status> lista = new ArrayList<>();
lista.add(Status.YES);
Status stat = Status.YES;
System.out.println(lista.contains(Status.YES));//true
System.out.println(lista.contains(stat));//true
}
我制作了这段代码并打印了两种方式,并且效果很好
或
你记得要实例化变量statusList