当前位置: 首页 > 面试题库 >

查找Java枚举的最佳实践

庄弘业
2023-03-14
问题内容

我们有一个REST API,客户端可以在其中提供代表Java Enums中服务器上定义的值的参数。

因此,我们可以提供一个描述性错误,我们将此lookup方法添加到每个Enum中。似乎我们只是在复制代码(错误)。有更好的做法吗?

public enum MyEnum {
    A, B, C, D;

    public static MyEnum lookup(String id) {
        try {
            return MyEnum.valueOf(id);
        } catch (IllegalArgumentException e) {
            throw new RuntimeException("Invalid value for my enum blah blah: " + id);
        }
    }
}

更新 :提供的默认错误消息valueOf(..)No enum const class a.b.c.MyEnum.BadValue。我想提供一个来自API的更具描述性的错误。


问题答案:

可能可以实现通用静态lookup方法。

像这样

public class LookupUtil {
   public static <E extends Enum<E>> E lookup(Class<E> e, String id) {   
      try {          
         E result = Enum.valueOf(e, id);
      } catch (IllegalArgumentException e) {
         // log error or something here

         throw new RuntimeException(
           "Invalid value for enum " + e.getSimpleName() + ": " + id);
      }

      return result;
   }
}

那么你就可以

public enum MyEnum {
   static public MyEnum lookup(String id) {
       return LookupUtil.lookup(MyEnum.class, id);
   }
}

或显式调用实用程序类查找方法。



 类似资料:
  • 问题内容: 我在这里看到了一些有关处理和持久保存枚举式值的最佳方法的问题/讨论(例如,持久化适用于枚举的数据,如何使用NHibernate来持久化枚举),我想问一下一般共识是什么。 特别是: 这些值应如何在代码中处理? 应该如何将它们持久保存到数据库中(作为文本/作为数字)? 不同解决方案的权衡是什么? 注意:我已将本问题中最初包含的解释移至答案。 问题答案: 我试图总结我的理解。 如果有任何更正

  • 问题内容: 在我们当前的自动化中(使用Selenium / WebDriver / Java),我们使用 非常 广泛。例如: 根据定义,可以使用以下内容找到选择器:using,id,名称,className,css,tagName,linkText,partialLinkText和xpath。 最近,我们的前端开发人员提议我们实现一个以’test =’开头的新属性类。我认为这是一个好主意,因为我们

  • 问题内容: 我读了《有效Java》,其中指出最好使用来实现单例。 此方法在功能上等效于公共领域方法,除了它更简洁,免费提供序列化机制,甚至针对复杂的序列化或反射攻击,还提供了针对多重实例化的明确保证。尽管此方法尚未得到广泛采用,但是单元素枚举类型是实现单例的最佳方法。 尽管如此,这似乎是在动态序列化和真正的单实例上实现的折衷方案,但您却失去了经典单例的更友好的OOP方法。枚举不能被继承,只能实现一

  • 我有一个RESTful Web API项目,我有2个不同的Enum场景,我不确定是最佳实践。 场景1:简单的枚举参数 我的API方法需要一个名为的参数,有效值为和。Web API项目中的枚举如下所示: 我对这个场景的问题是,我应该使用<code>吗?ruleType=EmailAddress(它会自动将该值绑定到API方法中的property)?如果是,如何最好地验证发送的<code>RuleTy

  • 具有以下定义 是否有一种方法可以正确执行比较以使用标准等式:

  • 问题内容: 假设有一个名为Type的简单枚举定义如下: 找到具有给定值的正确枚举通常是通过带for循环的静态方法(假设该方法在枚举内部定义)完成的,例如: 我认为用Stream API表示的功能等效如下: 我们怎么能写得更好,更简单?这段代码让人感觉很强迫,而且不太清楚。该特别是似乎笨重和滥用,因为它不累积什么,不进行计算,并始终直接返回(提供过滤器返回一个值- 如果不说的显然是个灾难),更何况是