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



我最近看到一篇文章,讨论在C#中使用基于枚举的类实现,这篇文章非常令人印象深刻。这里的第二个是Java。然而,我的同事建议我改用Enum。

有人能指出使用每种方法的利弊吗?以及何时使用?

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

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

官方枚举文档中有一个很好的例子来描述这一点:

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

此外,EnumSetEnumMap等集合类非常强大和高效。EnumSet具有与使用原始位字段类似的性能!但是,只有使用正确的枚举,才能访问这些类。

在Java中,枚举类型充当一个用其唯一名称声明的类。它和其他任何一个用来创建常数值的类非常相似。最近,我还发现一个信息,在Java中声明枚举之前,创建了一个类似枚举的类。就像关于这个问题的文章一样,在JVM 1.5之前,基于类的枚举似乎被广泛使用。

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

我认为这是对Java枚举以及创建它们的原因的一个很好的解释。文章声称Enum的3个优点:

1) 类型安全。

2) 除非该类工作彻底,否则Enum类很容易出现打印问题。当编码器想要返回一个字符串结果时,就会返回一个基元值。根据我的经验,通过在课堂上添加一些内容,这是可以避免的。但问题是,这对程序员来说方便吗。

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

因此:为了方便和代码可读性问题,枚举是一个不错的选择。此外,Enum Structure类似于嵌套在载体类中的单个类。如果程序员想增强Enum设计并创建自己的风格,他们可以回到旧的手动编码的基于类的系统。

主要区别在于Java的枚举更简单,可能不会打开基于C#枚举的类实现,并且基于枚举的类更像是一个类,而不是枚举的数据类型,即它可以扩展。而enum不能从另一个类派生,也不能扩展。

基于C#枚举的类的Java替代方案可以是:

public abstract static class CreditCard {
enum CreditCardType{
AMERICAN_EXPRESS, MASTER, VISA, DISCOVER;
}
CreditCardType type;
public abstract void operation1();
public abstract void operation2();
}

HI如果你知道如何使用enum,我会建议你使用它。因为它们有很多原因,其中一些是

  1. 使用较少的内存
  2. 具有某个恒定值
  3. 更少的处理时间
  4. 易于理解
  5. 可重复使用性
  6. 易于调试

就像它有很多优点,但另一方面它也有很多缺点,就像

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

最新更新