【发布时间】:2019-09-20 07:07:30
【问题描述】:
我有一个枚举 Foo
public enum Foo {
A("first"),
B("second"),
private final String value;
private Foo(String value) {
this.value = value;
}
public String value() {
return this.value;
}
}
下面我试图检查一个字符串是否包含在我的枚举中。
public boolean isValidFoo(String fooStr) {
return EnumSet.allOf(Foo.class)
.contains(Foo.valueOf(fooStr.toUpperCase()));
}
当我为fooStr 发送A 或B 时,此方法有效。
当我为fooStr 发送first 或second 时如何使它工作?
【问题讨论】:
-
不要调用valueOf(),调用value();这是返回值的方法的名称。更好的是,将它重命名为 getValue(),它会让区别更加清晰
-
您可以使用
Arrays.stream(Foo.values()).map(Foo::value).collect(toSet())创建一个Set,将此Set 存储在某个静态字段中,然后使用theSet.contains(fooStr)。 -
可能性,取决于用法:使用带有映射和过滤器的流来查找枚举;静态
HashMap在开始 映射值到枚举时创建;一个静态的Set也在 start 创建,包含所有值;或... -
@Stultuske 我不明白打电话给
value会有什么帮助? (contains检查枚举实例) -
@CarlosHeuberger 这是他的吸气剂的名字,这就是他获得价值的方式。