14

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

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

4

3 回答 3

13

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

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

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

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

  • 如果枚举是公开的,则本质上意味着它在更大范围内传达信息(即,在其父类范围之外有意义,因此可能意味着其他事物正在使用它)。如果是这种情况,那么将其设为独立枚举可能更有意义。
  • 我发现它 ThirdPartyResponseCodes.Success比眼睛更容易ThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success。没有理由不能适当地命名枚举以提供上下文,从而使其成为独立的枚举。
  • 我想不使用公共内部类的相同原因也适用于公共内部枚举。首先,如果你有一个内部类,这可能意味着你的外部类可能会从重构中受益。也许您的外部班级正在尝试做太多事情?但另一方面,封装和限制范围也有好处,特别是如果您可以提出内部类仅在外部类的上下文中才有意义的论点(如果它是私有的,这应该不言而喻)。如果它是一个公共内部类,那么这可能意味着它的范围超出了外部类,因此需要将其拉出。
  • 如果您确实需要使用公共嵌套枚举,那么您应该准确记录为什么需要它(我还没有找到这样做的理由)以及为什么最好将其保留为公共嵌套枚举而不是公共独立枚举。
于 2010-11-10T22:05:53.910 回答
0

原因可能是它使这些枚举难以在声明它们的类之外使用,因为您必须使用封闭类的名称来限定它们。当然,任何公共内部类也是如此。并且不确定我是否同意它——当然不是一个硬性规定。

于 2010-11-10T22:04:33.383 回答
0

如果它没有包含解释,您将不得不询问编写该编码标准的人。但是,您的这种说法有些令人困惑:

我理解为什么应该避免公共内部类,但是出于什么原因你永远不会使用公共嵌套枚举?

为什么你认为应该避免公共内部类?为什么这个原因不适用于枚举?

于 2010-11-10T22:05:08.500 回答