今天第一天看<<Effective Java>>,看了第六章的第一条就是全书的第30条--用enum代替int常量。
1.第一次知道原来enum也可以像class那样拥有成员函数。举个四则运算的例子:
package com.wjy.test; public enum Operation { PLUS,MINUS,TIMES,DIVIDE; double apply(double x,double y){ switch(this){ case PLUS: return x+y; case MINUS: return x-y; case TIMES: return x*y; case DIVIDE: return x/y; } throw new AssertionError("Unknown op: "+this); } }
调用代码:
package com.wjy.test; public class Test { public static void main(String args[]){ System.out.println(Operation.PLUS.apply(1.0,2.2)); } }
但是上述方式有一个问题,就是不利于扩展。若添加一个新的枚举常量还要更改switch添加一条语句,所以这种模式是很脆弱的。
有一种好的模式可以将不同的行为与每个枚举常量关联起来。
2.将不同的行为与每个枚举常量关联的办法:
package com.wjy.test; public enum Operation { PLUS{ double apply(double x,double y){return x+y;} }, MINUS{ double apply(double x,double y){return x-y;} }, TIMES{ double apply(double x,double y){return x*y;} }, DIVIDE{ double apply(double x,double y){return x/y;} }; abstract double apply(double x,double y); }
调用代码
package com.wjy.test; public class Test { public static void main(String args[]){ System.out.println(Operation.PLUS); System.out.println(Operation.PLUS.apply(1.0,2.2)); } }
运行结果:
//结果 PLUS 3.2
问题又出现了,为什么输出的是"PLUS"而不是”+“,为了让他输出"+",应该覆盖toString方法。
3.重载toString()
package com.wjy.test; public enum Operation { PLUS("+"){ double apply(double x,double y){return x+y;} }, MINUS("-"){ double apply(double x,double y){return x-y;} }, TIMES("*"){ double apply(double x,double y){return x*y;} }, DIVIDE("/"){ double apply(double x,double y){return x/y;} }; private final String symbol; Operation(String symbol) { this.symbol=symbol; } @Override public String toString(){ return symbol; } abstract double apply(double x,double y); }
则Option.PLUS和"+"关联起来了。
相关推荐
Java enum 的用法详解 Java enum(枚举)是一种特殊的数据类型,用于定义一组固定的常量。从 JDK 1.5 开始,Java 引入了 enum 机制,解决了传统的常量定义方式的不足。 用法一:常量 在 JDK 1.5 之前,我们定义...
在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...
枚举类型是`java.lang.Enum`抽象类的子类,提供了一种安全且类型化的常量表示方式。下面我们将深入探讨enum的使用方法。 1. **定义枚举** 定义枚举的关键字是`enum`,例如: ```java public enum WeekDays { ...
### Java的Enum知识点详解 #### 一、枚举的基本概念 在Java中,`enum`(枚举)是一种特殊的类,用于定义一组常量值。它可以帮助开发者限制一个变量的可能值,使其只能从预定义的一组选项中选择。枚举提供了一种更...
java初学者内容对于enum类型,可能仅仅停留在枚举项只有一个字段的数据,在实际开发中可能对着每个枚举项包含几个信息,key value,学生姓名,年龄,身高等,样例详细定义了包含多个值enum类型并使用,请参考文件
Java 枚举(enum)是Java 1.5 引入的一种新的数据类型,它用于表示一组相关的值,这些值可以被当作常量来使用。枚举类型比传统的静态常量更加安全,可读性更好,并且允许进行更丰富的定制。下面我们将详细探讨Java ...
Java的枚举(Enum)是Java语言中一种特殊的数据类型,用于表示一组固定数量的值。在Java中,枚举可以看作是一种预定义的类,具有类的特性,但比普通类更加强制和安全。以下是关于Java枚举的详细讲解: 1. **枚举的...
### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...
Java 枚举(enum)是 Java 语言中的一个重要特性,自 Java 5 开始引入。枚举用于定义一组相关的常量,这些常量通常代表一个有限的、预定义的值集合。枚举类是一种特殊的类,它具有以下特点: 1. **枚举类的声明**:...
Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它用于定义一组相关的常量。枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类...
Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的常量表示机制。它不仅仅是一个简单的数据类型,而是一种特殊的类,能够帮助我们更好地管理和组织一组相关的常量。枚举类型使得代码更加清晰,易于理解和维护,...
Java 枚举类型 enum 的详解及使用 Java 枚举类型 enum 是 Java 语言中的一种特殊的数据类型,自从 JDK 1.5 引入枚举类型以来,它已经成为了 Java 程序员中的一种常用工具。本文将对 Java 枚举类型 enum 进行详解,...
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...
Java 中枚举类 enum 的 values() 方法详解 Java 中的枚举类 enum 是一种特殊的类,通过使用 enum 关键字来定义。枚举类 enum 中有一个特殊的方法,values(),这个方法可以将枚举类转换为一个枚举类型的数组。通过...
### Java中的Enum枚举用法详解 #### 一、引言 在Java编程语言中,枚举(Enum)是一种特殊的数据类型,它被用来表示一组固定的常量集合。相比于使用常量接口或字符串来表示固定集合,枚举提供了更加安全且易于管理的...
总之,Java `enum`提供了定义一组预定义值的强大工具,不仅可以作为常量,还可以拥有方法和行为,甚至实现接口。这使得枚举成为编写清晰、可维护的代码的重要组成部分。在实际开发中,应充分利用这些特性来提高代码...
Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它不仅提供了定义常量的简洁方式,还能实现许多高级功能。以下将详细介绍7种常见的Java枚举用法: 1. **常量用法**: 在JDK 1.5之前,我们通常使用`...
### Java_Annotation详解 #### 元数据的作用与分类 元数据在编程中扮演着至关重要的角色,尤其是在Java中,通过注解(Annotation)这一特性,元数据被广泛应用于多个方面,包括但不限于文档生成、代码分析以及编译...