我最近遇到一个编码标准,声称你应该使用从不使用使用public Java中的内部枚举/类。这是我第一次遇到这个惯例,并且一直未能找到令人满意的解释。千万不要使用公共嵌套枚举?
我明白为什么应该避免公开内部类,但是为什么你不会使用公共嵌套枚举呢?或者,为什么这是一个糟糕的惯例?
我最近遇到一个编码标准,声称你应该使用从不使用使用public Java中的内部枚举/类。这是我第一次遇到这个惯例,并且一直未能找到令人满意的解释。千万不要使用公共嵌套枚举?
我明白为什么应该避免公开内部类,但是为什么你不会使用公共嵌套枚举呢?或者,为什么这是一个糟糕的惯例?
免责声明:以下不是硬性规定。这些只是我的意见和个人喜好。我个人发现它使我的代码更易于阅读和维护。
第一个问题。你从哪里看到这个建议?他们提供了任何理由吗?
以我的经验,我通常使用私有嵌套枚举来增强我的代码的可读性和可维护性。当您与另一个系统进行集成时,这尤其会发挥作用,并且您必须发送特定的字符串或数字。我发现使用枚举可以使事情更容易阅读和维护。在这个特定的情况下,enum传递的信息在范围上受限于类(即在类之外没有意义,也没有其他人需要它)。
我想不出一个明确的理由,说明为什么公共内部枚举是一个不好的做法。但这里有原因,我不(正常)使用它们:
ThirdPartyResponseCodes.Success
而不是ThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success
。没有理由不能正确命名枚举来提供上下文,从而使其成为独立枚举。我是AEW的同事。关于第3点,所讨论的类是基于java TimeUnit模式的单位长度类,但它也在内部保持了值(在本机单元中)。我觉得这是一个非常明显的封装和限制范围的情况。 – swarfrat 2010-11-11 16:08:56
原因可能是它使得这些枚举难以在它们声明的类之外使用,因为你必须用封闭类的名称来限定它们。当然,对于任何公共内部阶层来说也是如此。我不确定我是否同意 - 当然不是一个硬性规定。
如果不包含解释,你必须询问编写该编码标准的人。然而,你的这种说法是有点混乱:
我明白为什么大众内部类 应避免,但什么原因 你会不会使用公共 嵌套枚举?
你为什么认为应该避免公开内部类?为什么这个原因不适用于枚举?
请参阅http://onjava.com/pub/a/onjava/excerpt/HardcoreJava_chap06/index.html。内部类在包含类之外使用时具有奇怪的构造函数。这与嵌套的(即静态的)类不同,嵌套的枚举是如何工作的。 – AEW 2010-11-10 22:27:40
这不仅仅是一个回答而是一个评论。 – 2016-12-17 07:08:59
你从哪里读到的?你能指出那篇文章吗 – 2010-11-10 22:00:43
当你说你“遇到”这个标准时。如何和在哪里。毫无疑问,它会给出一些推理。 – David 2010-11-10 22:02:06
不幸的是,我无法链接到源,因为它是以公司内部电子邮件的形式。推理很简短,并提到调试更简单,遵循Java约定。 – AEW 2010-11-10 22:10:24