java - 从不使用公共(public)嵌套枚举?

标签 java enums coding-style inner-classes nested-class

我最近遇到了一个编码标准,它声称您应该永远在 Java 中使用public内部枚举/类。这是我第一次遇到这种约定,一直没能找到令人满意的解释。

我理解为什么应该避免使用公共(public)内部类,但是出于什么原因您永远不会使用公共(public)嵌套枚举?或者,为什么这是一个糟糕的约定?

最佳答案

免责声明: 以下并非硬性规定。这些只是我的意见和个人喜好。我个人发现它使我的代码更易于阅读和维护。

先问一个问题。你是从哪里得到这个建议的?他们有提供任何理由吗?

根据我的经验,我通常使用私有(private)嵌套枚举来增强代码的可读性和可维护性。当您执行与另一个系统的集成并且您必须发送特定的字符串或数字时,这尤其有用。我发现使用枚举可以使事情更易于阅读和维护。在这种特定情况下,枚举传递的信息仅限于类的范围(即,它在类之外没有任何意义,其他人不应该需要它)。

我想不出一个明确的理由来说明为什么公共(public)内部枚举是一种不好的做法。但以下是我不(通常)使用它们的原因:

  • 如果枚举是公开的,它本质上意味着它在更大范围内传递信息(即,在其父类范围之外有意义,因此可能意味着其他东西正在使用它)。如果是这种情况,那么将其设为独立枚举可能更有意义。
  • 我发现 ThirdPartyResponseCodes.SuccessThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success 更容易看。您没有理由不能适本地命名枚举以提供上下文,从而使其成为一个独立的枚举。
  • 我认为不使用公共(public)内部类的原因同样适用于公共(public)内部枚举。首先,如果你有一个内部类,这可能意味着你的外部类可能会从重构中受益。也许你的外部类正在尝试做太多?但另一方面,封装和限制范围也有好处,特别是如果您可以论证内部类仅在外部类的上下文中才有意义(如果它是私有(private)的就不用说了)。如果它是一个公共(public)内部类,那么这可能意味着它的范围超出了外部类,因此需要将其拉出。
  • 如果您确实需要使用公共(public)嵌套枚举,那么您应该准确记录为什么需要它(我还没有找到这样做的理由)以及为什么最好将其保留为公共(public)嵌套枚举而不是公开的独立枚举。

关于java - 从不使用公共(public)嵌套枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149426/

相关文章:

Java自定义Exception错误未报告异常

java - 如何将使用 eclipse 和 tomcat 构建的 Java EE 项目部署到万维网?

c# - 我们应该把枚举放在哪里?

java - 在 Java 枚举类型中使用 +

c++ - 干净的编码 : how to break loops from inside a function call inside a loop

c# - SharpDevelop 改变代码风格

java - 从数据库中获取记录并自动生成树

java - 如何使最简单的 servlet 过滤器尊重设置的字符编码

c# - 通用枚举类型扩展方法的随机枚举值

java - 如何确定 java 中枚举的最低/最高索引?