`
xielingjiang
  • 浏览: 32497 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java基础再学习之枚举类型

阅读更多
最近看到Enum类的时候,发现它的定义方法很特别。关于泛型的在学习我将在另外一篇中详细描述。http://xielingjiang.iteye.com/admin/blogs/870101

public abstract class Enum<E extends Enum<E>>

这句话什么意思呢?想了半天,发现它的意思就是让Enum这个类里面具有访问Enum子类的class类的能力。比如
public final int compareTo(E o) {

这样它的所有子类就具有了compareTo方法,而且可以用这个方法的必须是自己同类。

当然我觉得Enum的定义开头有点绕,在自己把自己当作形参的情况下,完全可以写成:
public abstract class Enum<E extends Enum>

这样就清晰了,要不然就容易看成循环

好了,我试图继承这个abstract类,但是令我惊奇的是,无论如何我都不能让编译器通过。查资料也很少提及Enum类的继承,后来我得出结论,Enum类根本就不能被继承。让我火大的是尽然这样定义成抽象类,如果定义成final类我也无话可说,唉···,误导啊。

其实我要继承Enum的初衷是要实现枚举类型的树状结构,可惜这不行。
如果我要实现一些公共的枚举类型,我非要重复写代码不可。
比如我要定义个BaseEnum,这个BaseEnum里面有这么一个公共的属性,比如int id; String name;以及他们的get/set方法和enum构造方法。如果不能实现,那我没定义个具体的Enum,我都得写上这个公共属性值和方法定义。
真是没有天理啊。。。

经过一天的研究,enum的继承只能用类继承来模拟实现了。
我的实现如下:
定义个抽象类,并且把它的构造方法定义成protected
public abstract class BaseEnum  {
	protected int id;
	protected String name;
	protected BaseEnum(int id,String name){
		this.id=id;
		this.name=name;
	}
}

为了能用==符号来比较,我把这个BaseEnum改装一下,如下:
public abstract class BaseEnum  {
	protected int id;
	protected String name;
	protected BaseEnum(int id,String name){
		this.id=id;
		this.name=name;
	}
public int hashCode(){
    return id;
}
public boolean equals(Object o){
  if(id == (BaseEnum)o.id) return true;
  else return false;
}
}

定义自己的枚举类型,它继承自上面的BaseEnum,然后把它的构造方法申明为private,这样就没有人能实例化这个类了。然后在这个类中实例化几个枚举值,值的类型是自己,而且是public static final的。如下:
public class MyEnum extends BaseEnum{

	private MyEnum(int id, String name) {
		super(id, name);
	}
	public static final MyEnum COLOR1=new MyEnum(1,"Red");
	public static final MyEnum COLOR2=new MyEnum(2,"Red");
	public static final MyEnum COLOR3=new MyEnum(3,"Red");
	public static final MyEnum COLOR4=new MyEnum(4,"Red");
}


虽然有缺陷,每次继承的时候必须重复写private构造方法,但是毕竟是模拟的嘛。
还有,这个模拟的enum并不能实现switch,这个也是它的遗憾的地方,谁叫sun考虑不周呢。。。将就这用吧
0
0
分享到:
评论

相关推荐

    Java基础知识点总结.docx

    Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 ...

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    Java学习笔记(必看经典)

    本书是作者近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API等均进行了...

    JAVA基础课程讲义

    枚举 133 上机作业 135 第七章 容器(Collection) 136 容器的作用和概览 136 容器中的接口层次结构 136 Collection接口 137 LIST接口 137 SET接口 138 Map接口 138 Iterator接口 139 遍历集合 140 Collections工具类 ...

    良葛格Java JDK 5.0学习笔记

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍  《java jdk 7学习笔记》是作者多年来教学实践经验的总结...

    java经典编程300例

    Java经典编程300例》内容包括java语言概述、eclipse开发工具、java语言基础、流程控制、数组及其常用操作、面向对象入门、面向对象进阶、字符串与包装类、java集合类框架、常用数学工具类、错误处理、输入/输出、...

    回顾 Java SE 基础实现代码 Java学习资料 自学资料

    回顾 Java SE 基础,基于 jdk-1.8 实现代码。 目录 语言基础 (八大)基本类型与引用类型 类型转换 运算符 流程控制 字符串与数组 核心技术 抽象 类的高级特性 final 内部类 枚举与泛型 异常处理 集合 I/O 反射 多...

    JAVA经典编程300例

    Java经典编程300例》内容包括java语言概述、eclipse开发工具、java语言基础、流程控制、数组及其常用操作、面向对象入门、面向对象进阶、字符串与包装类、java集合类框架、常用数学工具类、错误处理、输入/输出、...

    2023Java的学习

    Java的基础部分主要包括基本语法、数据类型、运算符、控制语句、类和对象、继承、多态、抽象类、接口、内部类等内容。这些内容是构建Java程序的基础,是理解Java语言的关键。 Java的面向对象部分是Java语言的核心,...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java基本数据类型 string和包装类 final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解...

    Java基础学习教程(附PPT和源代码)

    java5的枚举的基本应用rar 实现带有构造方法的枚举.rar 实现带有抽急方法的枚举rar 适彻分析反射的基础 Class类rar 理解反射的概念.rar 构造方法的反射应用.rar 成员变量的反射.rar 成员变量反射的综合案例.rar 成员...

    藏经阁-Java工程师成神之路-375页

    《Java工程师成神之路(基础篇)》介绍了普通Java工程师必须要学习的相关知识点,包括面向对象和Java语言基础两大部分,涵盖基本数据类型、关键字、异常、I/O流、集合、反射、泛型和枚举......另外,内附成神导图哦~

    Java开发技术大全(500个源代码).

    示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 ...

    Java经典编程300例(完整版+源码

    本书内容详尽,实例丰富,非常适合作为零基础学习人员的学习用书和大中专院校师生的学习教材,也适合作为相关培训机构的师生和软件开发人员的参考资料。 《java经典编程300例》 第1章 java语言概述 实例001 输出...

    java学习笔记 初学者必读

    17.4. 类型安全的枚举 17-70 17.5. 静态引入 17-71 17.6. C风格的格式化输出 17-72 17.7. Building Strings(StringBuilder类) 17-73 17.8. 可变长的参数 17-73 17.9. JAVA5.0 的注释 (Annotation) 17-73 17.10. ...

    Java工程师面试复习指南

    【Java工程师面试复习指南】本仓库架构大部分Java工程师所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南,如果对你有帮助,给个star告诉我吧,谢谢!...

    LearnJava:了解Java

    Java基础 :讲解Abstract :关于接口的说明 :接口与摘要之间的区别 更新接口默认方法 更新接口静态方法 和StackMemory&HeapMemory说明 枚举 Usage.java:ThreadStates (枚举类型)和ThreadStatesConstant(类...

    Java开发详解.zip

    010301_【第3章:Java基础程序设计】_Java数据类型笔记.pdf 010302_【第3章:Java基础程序设计】_运算符、表达式与语句笔记.pdf 010303_【第3章:Java基础程序设计】_判断与循环语句笔记.pdf 010401_【第4章:数组与...

    《Java必须知道的300个问题》明日科技编著

    主要内容包括Java语言概述、Eclipse开发工具、Java语言基础、流程控制、数组、面向对象入门、面向对象进阶、字符串与包装类、Java集合类框架、常用数学工具类、异常处理、输入/输出、枚举类型与泛型、Swin9入门、多...

Global site tag (gtag.js) - Google Analytics