`

Java enums in JDK 1.4

    博客分类:
  • JSE
阅读更多
Constantly, we need to define enums. In Java 1.5, there is also a keyword. However, in JDK 1.4, we are out of the luck and have to come up something to simulate enums.

The motivation for enums is to avoid hardcoding same constants everywhere because it makes maintanence a nightmare, hard to track where the same constants are used, whether the upper/lower cases mean the same, the change of any constant requires changes in multiple places.

A simple way to create enums is using the infamous "public static final int". However, the general type without restriction(like int type) makes the interface signature(and consequently IDE prompts) quite confusing and error prone(pass in invalid data). So a better solution is proposed in "Effective Java" #21. Though we are strong typed, this approach creates a new problem - == is broken because we can't maintain the singletons in the vast different environments.

The reasons are:

1. there are clusters, acrossing several JVMs.
2. cross wires to a different JVM
3. different classloaders(so overriding readResolve() doesn't work either).

The compromise is to use equals().

To make matters worse, if there is a data structure among these constants, e.g., a tree structure, meaning, the constants are not quite mutual exclusive, then we need to maintain the structure as well. A typical case is the object class types in a class hierachy. For example, suppose we have a top class Automobile, and subclasses Car, Truck, Utility/Sports, and each of these has subclasses corresponding to manufactures/brand, BMW, BENZ, Toyota, etc. Then for each manufacture, they have different models. So we could keep going and eventually get a class hierarchy.

Now for some reason(many reasons, like performance, grouping, and others), we need to map this class hierarchy to an enum hierarchy and use it. A typical naive approach is using switch or if-else, a better approach is to build a visitor around it with double dispatch. However, building a fast visitor on top of non-exclusive enum hierarchy is not as trivial as we thought.
Another twist is documented in Hardcore Java chapter 7, when we have an enum is one class, and have another enum in its subclasses. So the challenge now becomes how to build an universal enum structure that could spread in several classes and is non-exclusive, while keep out the if-else checks.


References:

Hardcore Java, chapter 7
Javaworld java tip 122
分享到:
评论

相关推荐

    java开发常用工具 idea jdk1.4 redisdesktopManager setings文件.7z

    尽管1.4版本相对较老,但它是Java发展历史中的一个重要里程碑,引入了如断言(Assertions)、枚举(Enums)等特性。对于学习Java历史或支持遗留系统的人来说,这个版本依然有价值。j2sdk-1_4_2-windows-i586-64.7z...

    JDK1.4 JDK1.5

    JDK1.4发布于2002年8月,它引入了一些重要的特性,如正则表达式的支持、网络连接的优化等,这些特性极大地提高了Java开发者的效率。而JDK1.5,也被称为Java SE 5.0,发布于2004年9月,带来了更多重大的变化,例如...

    JDK1.5与1.4区别

    在JDK 1.4中,调用Math.sqrt()需要写成`java.lang.Math.sqrt()`,但在JDK 1.5之后,可以使用`import static java.lang.Math.sqrt;`然后直接调用`sqrt()`。 5. **变长参数(Variable-Length Arguments)** - 变长...

    JDK转换器(1.5-->1.4)

    这个“JDK转换器(1.5-->1.4)”工具对于那些需要在旧版本JRE上运行的项目非常有用,它能够帮助开发者解决由于版本不兼容带来的问题,使得代码能在较旧的Java环境中顺利执行。使用这个转换器时,开发者需要注意转换...

    JDK 5.0.zip

    8. **NIO.2(New I/O API)**:虽然NIO在JDK 1.4中已经引入,但JDK 5.0对它进行了扩展,提供了更好的异步I/O支持和文件系统操作,如文件通道、文件属性等。 9. **静态导入(Static Import)**:允许将类的静态成员...

    java jdk1.5

    虽然Java NIO是在1.4版本引入的,但在1.5中进一步完善,增加了文件通道、文件锁等功能,提升了I/O操作的性能和灵活性。 以上是Java JDK 1.5的一些核心特性。`JDK_API_1_5_zh_CN.CHM`文件很可能是Java 1.5的中文API...

    【计算机专业文献翻译】在 JDK 早期版本中使用 Java 5 的语言特性.pdf

    对于开发组件、库或应用框架的开发者来说,他们的客户可能还在使用JDK 1.4或更早版本,因此如果使用Java 5的特性,将导致这些组件无法在旧版本的JVM上运行,限制了客户群体。 对于从事Java EE开发的团队,由于担心...

    jdk_1.5_x86

    10. **NIO.2 (New I/O API)**: 虽然在JDK 7中正式引入,但其前身NIO(Non-blocking I/O)在JDK 1.4发布,JDK 1.5中进一步优化,提供了异步I/O操作。 **安装与配置** JDK 1.5的安装文件为`jdk-1_5_0_22-X86.exe`,...

    jdk1.5 windows 64位官方正式版

    它是JDK 1.4的后续版本,并为JDK 1.6奠定了基础。 **主要特性与更新:** 1. **泛型(Generics)**:泛型是JDK 1.5最显著的新特性之一,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和重用性...

    详细介绍JDK1.5的各种新特性

    8. **NIO.2(New I/O 2)**:虽然NIO(非阻塞I/O)是在JDK1.4引入的,但JDK1.5对其进行了扩展,添加了文件系统操作和文件观察者等功能,使得文件操作更加高效和灵活。 9. **类型安全的异常检查(Checked Exceptions...

    JDK1.5源代码,有原文注释

    虽然在JDK 1.4中引入了NIO,但在JDK 1.5中进一步完善,提供了更多的文件系统操作和通道(Channels)功能。 通过阅读和研究这份JDK 1.5的源代码,开发者不仅可以深入了解Java平台的工作原理,还能学习到许多优秀的...

    jdk1.5API中文chm版

    9. **NIO.2(New I/O 2)**:虽然JDK 1.4引入了NIO(非阻塞I/O),但JDK 1.5进一步完善,增加了文件系统操作、文件通道、异步I/O等特性。 10. **异常链(Exception Chaining)**:允许一个异常对象引用另一个异常,...

    JDK1.5中新的语言特征分类介绍

    泛型是Java Development Kit (JDK) 1.5 版本中最显著的新特性之一,它为开发者提供了强大的类型安全机制。在Java早期版本中,集合(如`List`或`Set`)中的元素类型是不确定的,这意味着在编译时不会检查集合中的元素...

    JDK 1.5新特性

    在JDK 1.4之前,集合类中的元素类型只能在运行时检查,而在JDK 1.5之后,我们可以通过如下方式声明一个只存储字符串的列表: ```java List<String> listOfEmployeeName = new ArrayList(); ``` 这使得插入非字符串...

    java JDK1.5 第一部分

    9. **NIO.2(New I/O 2.0)**:虽然Java 1.4引入了NIO(非阻塞I/O),但1.5进一步完善了这一部分,提供了更丰富的文件系统操作API,包括文件和目录的异步操作,以及文件属性和文件通道的增强。 10. **构造器注入**...

    JDK 1.5 API 中文文档 HTML格式

    10. **NIO.2(New I/O)**:虽然NIO是在JDK 1.4引入的,但1.5对其进行了增强,提供了更高级别的通道和文件系统操作。 这些知识点构成了JDK 1.5的主要改进,对任何Java开发者来说都具有极高的学习价值。有了这个中文...

    jdk1.5 jdk

    2. **枚举(Enums)**:JDK 1.5引入了枚举类型,使得程序可以更好地表示一组固定值,如状态、星期等。枚举提供了一种强类型的安全机制,避免了误操作和空指针异常。 3. **自动装箱/拆箱(Autoboxing and Unboxing)...

    Java零基础 - Java语言发展史.md

    - **JDK 5.0 (2004年)**:这是一个里程碑式的版本,引入了多项重要特性,包括泛型(Generics)、注解(Annotations)以及枚举(Enums)等,这些特性极大地增强了Java的灵活性和表达能力。 - **JDK 6 (2006年)**:引入...

    JDK1.5和Tomcat5.5.9.rar

    JDK(Java Development Kit)是Oracle公司提供的Java编程环境,而Tomcat是一款流行的开源Web服务器和应用服务器,主要用于运行Java Servlet和JavaServer Pages(JSP)。在本例中,我们讨论的是JDK1.5和Tomcat5.5.9的...

    Java_api_1.5

    2. **枚举(Enums)**:Java 1.5引入了枚举类型,结束了对单例常量的硬编码管理,使得枚举成为一种正式的类型,支持方法和继承,提高了代码的可读性和可维护性。 3. **自动装箱/拆箱(Autoboxing and Unboxing)**...

Global site tag (gtag.js) - Google Analytics