在Java中Enum和基于枚举的类实现之间的优缺点是什么?

时间:2013-12-20 10:27:26

标签: java enums

我最近遇到一个article讨论在C#中使用基于枚举的类实现,这非常令人印象深刻。第二个here是Java。但是,我的同事建议我改用Enum。

任何人都可以指出使用它们的利弊,以及何时使用它?

5 个答案:

答案 0 :(得分:4)

你引用的Java文章来自2001年。那时,Java没有枚举,作者描述的方法是程序员当时用来解决Java缺陷的方法。 Java 5在2004年引入了枚举,现在旧的模式已经过时了。所以你的同事很好:你应该使用枚举。

答案 1 :(得分:2)

Java标准枚举实现已完全基于类 - 您可以在标准Java枚举中定义您喜欢的任何方法,成员变量等。

对官方枚举文档中的示例进行了很好的描述:

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

此外,EnumSetEnumMap等集合类非常强大且高效。 EnumSet与使用原始位域具有相似的性能!如果您使用正确的枚举,则只能访问这些类。

答案 2 :(得分:1)

主要区别在于Java的枚举更简单,可能无法切换基于C#enum的类实现,而基于枚举的类更多是类,而不是枚举数据类型,即可以扩展。枚举不能从另一个类派生,也不能扩展。

基于C#enum的类的Java替代方案可能是:

public abstract static class CreditCard {
    enum CreditCardType{
        AMERICAN_EXPRESS, MASTER, VISA, DISCOVER;
    }

    CreditCardType type;

    public abstract void operation1();
    public abstract void operation2();
}

答案 3 :(得分:1)

在Java中,Enum类型充当以其唯一名称声明的类。它与设计用于创建常量值的任何其他类非常相似。最近,我还发现了一个信息,在Java中声明Enums之前,创建了一个类似枚举的类。就像在这个问题上提出的那篇文章一样,似乎JVM 1.5之前的基于类的枚举被广泛使用。

您可以查看此来源:http://javarevisited.blogspot.com/2011/08/enum-in-java-example-tutorial.html

我认为这是对Java Enums及其创建原因的一个非常好的解释。该文章声称Enum有3个优点:

1)类型安全。

2)除非课程工作彻底,否则Enum课程容易出现打印问题。当编码器想要返回字符串结果时,返回原始值。根据我的经验,通过对课程的一些补充,可以避免这种情况。但问题是,编码器是否方便。

3)同样,访问基于类的实例。因此,编码器无法直接访问Enum选项。编码员必须使用班级名称。

因此:为了方便和代码可读性问题,Enums是一个不错的选择。另外,Enum Structure类似于嵌套在运营商类中的单个类。如果编码器想要增强Enum Design并创建他们自己的风格,他们可以回到旧的手动编码的类系统。

答案 4 :(得分:0)

如果您知道如何使用它,我建议使用枚举。 因为他们中的一些人有很多原因

  1. 使用更少的内存
  2. 有一些不变的值
  3. 减少处理时间
  4. 易于理解
  5. 可重用
  6. 易于调试
  7. 像这样它有许多优点,但另一方面它也有许多缺点,如

    1. 限制使用意味着我们使用enum
    2. 有一些限制