【问题标题】:alternative to using or operator java? [duplicate]替代使用或运算符 java? [复制]
【发布时间】:2020-03-23 13:29:29
【问题描述】:

我了解 or 运算符仅适用于布尔表达式。所以我想知道是否有一种好方法可以在不使用 or 运算符的情况下执行下面的代码?

if(hh.getName() != "apple" || "Health Potion" || "roatisary chicken" || "backpack")

【问题讨论】:

  • 需要更多上下文。所有这些字符串都是相对的吗?
  • if (!Set.of("apple", "Health Potion" /* etc */).contains(hh.getName())).
  • @Jason 与字符串相关的“相对”是什么意思?
  • 所有字符串都在同一个超类的子类的构造函数中,称为 item,我将其用作正在使用的类的实例的标识符,并向用户打印出正在使用的 item .但现在我想知道在这种情况下使用 instanceof 是否会更好
  • @AndyTurner 相对意味着相对于。问题很简单,所有这些字符串是否相互关联。

标签: java


【解决方案1】:

如果这些都以某种方式相关,一个可能的解决方案是将它们存储在一组 String 对象中。值得注意的是,此解决方案取决于每个字符串是否区分大小写。

Set<String> values = new HashSet<>(Arrays.asList("apple", "Health Poition", "roatisary chicken", "backpack"));

然后,检查 set 是否包含字符串 hh.getName()

if (values.contains(hh.getName()) {

}

更好的解决方案 一个可能更好的解决方案是使用枚举而不是一堆字符串。

enum Item {
   APPLE,
   HEALTH_POTION,
   ROATISARY_CHICKEN,
   BACKPACK
}
Set<Item> items = ImmutableMap.copyOf(EnumSet.allOf(Item.class));
Item myItem = ...;

if (items.contains(myItem)) {

}

【讨论】:

    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 2011-03-06
    • 2013-10-09
    • 2013-02-20
    • 2017-11-06
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    相关资源
    最近更新 更多