emum定义如下:

public abstract class Enum<E extends Enum<E>>extends Objectimplements Comparable<E>, Serializable

此类定义使用了泛型接口,而且实现了Comparable接口和Serializable接口,证明了此类型是可以被比较和序列化的。

构造方法:

protected  Enum(String name, int ordinal)      单独的构造方法。 

emun构造方法,中接收的两个参数,一个表示枚举的名字(name()),另一个表示枚举的序号ordinal()。

public enum Color{
RED,GREEN,BLUE ;
}

Red实际上就是枚举的名称,默认的编号是0.

例子:

package 类集;
enum color1
{ red,black,green
}
public class test1{
public static void main(String args[]){
for(color1 c:color1.values()){
System.out.println(c.ordinal() + " --> " + c.name()) ;
}
}
}

结果:

0 --> red
1 --> black
2 --> green

如果此时希望做点改进,希望使用文字表示 颜色的信息,则可以按照color类形式,在枚举类中定义属性(也就是name)构造方法

但是一旦声明有参数构造之后,在声明枚举对象的时候就必须明确地调用构造方法,并传递参数

如下:

package 类集;
enum Color{
RED("红色"),GREEN("绿色"),BLUE("兰色") ;  //明确地调用构造方法,并且传递参数。
private Color(String name){
this.setName(name) ;
}
private String name ; // 定义name属性
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name ;
}
}
public class test1{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal() + " --> " + c.name()
+"(" + c.getName() + ")") ;
}
}
}

返回结果:

0 --> RED(红色)
1 --> GREEN(绿色)
2 --> BLUE(兰色)

如果现在不想通过构造方法设置内容,而想通过getter(),setter()方法设置内容,则必须按照如下方式进行。

package 类集;
enum Color{
RED,GREEN,BLUE ;
private String name ; // 定义name属性
public void setName(String name){
switch(this){ // 判断操作的是那个枚举对象
case RED:{
if("红色"
.equals(name)){  //必须还得判断设置的内容是否合格。
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case GREEN:{
if("绿色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case BLUE:{
if("蓝色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
}
this.name = name ;
}
public String getName(){
return this.name ;
}
}
public class test1{
public static void main(String args[]){
Color c = Color.BLUE ; // 得到兰色
c.setName("兰色") ; // 名字错误
c.setName("蓝色") ; // 名字正确
System.out.println(c.getName()) ;
}
}

输出结果:

设置内容错误。
蓝色

以上发现通过构造方法更简便一些。

通过valueof()方法,指定枚举名称来得到枚举常量

static <T extends Enum<T>>  T  valueOf(Class<T> enumType, String name)   返回带指定名称的指定枚举类型的枚举常量。 

可以把上面那段代码主方法里的第一句话给替换掉。如下。

package 类集;
enum Color{
RED,GREEN,BLUE ;
private String name ; // 定义name属性
public void setName(String name){
switch(this){ // 判断操作的是那个枚举对象
case RED:{
if("红色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case GREEN:{
if("绿色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
case BLUE:{
if("蓝色".equals(name)){
this.name = name ; // 允许设置名字
}else{
System.out.println("设置内容错误。") ;
}
break ;
}
}
this.name = name ;
}
public String getName(){
return this.name ;
}
}
public class test1{
public static void main(String args[]){
Color c = Color.valueOf(Color.class,"BLUE") ; // 得到兰色
c.setName("兰色") ; // 名字错误
c.setName("蓝色") ; // 名字正确
System.out.println(c.getName()) ;
}
}

对于枚举.Class是java中反射机制内容。

枚举中实际上已经实现了comparable接口,所以枚举中内容是可以排序的。

package 类集;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet; enum Color{
RED,GREEN,BLUE ;
}
public class test1{
public static void main(String args[]){
Set<Color> t = new TreeSet<Color>() ; // 设置类型
t.add(Color.GREEN) ; // 加入绿色
t.add(Color.RED) ; // 加入红色
t.add(Color.BLUE) ; // 加入蓝色
Iterator<Color> iter = t.iterator() ;
while(iter.hasNext()){
System.out.print(iter.next() + "、") ;
}
}
}

输出,

RED、GREEN、BLUE、

可以发现,加入TreeSet的时候是无序的,输出的时候是有序的。

通过TreeSet

emum类(2)的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. 使用枚举(emum)代替常量类

    原文: 作者:逍遥不羁 来源:CSDN 原文:https://blog.csdn.net/javaloveiphone/article/details/52371706 版权声明:本文为博主原创文章, ...

  3. UE4 中Struct Emum 类型的定义方式 笔记

    UE4 基础,但是不经常用总是忘记,做个笔记加深记忆: 图方便就随便贴一个项目中的STRUCT和 Enum 的.h 文件 Note:虽然USTRUCT可以定义函数,但是不能加UFUNCTION 标签喔 ...

  4. 《Java核心技术》 -- 读书笔记 ② - 类 | 对象 | 接口

    对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址) ...

  5. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  6. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  7. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  8. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  9. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

随机推荐

  1. java中的类型比较

    Java 里的既可以比较基本类型也可以比较引用类型. 对于基本类型,Java 的==比较值比较 对于引用类型,Java 的==比较了引用的是否为同一个对象(比较内存地址), 也就是说这两个变量是否都指 ...

  2. PIC32MZ tutorial -- Key Debounce

    Today I accomplish a application on PIC32MZ EC Starter Kit. The feature of application is to light u ...

  3. Eclipse JSP/Servlet 环境搭建

    Eclipse JSP/Servlet 环境搭建 本文假定你已安装了 JDK 环境,如未安装,可参阅 Java 开发环境配置. 我们可以使用 Eclipse 来搭建 JSP 开发环境,首先我们分别下载 ...

  4. 安装 ppsycopg2报错, Error: You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application

    sudo apt-get install libpq-dev

  5. centos7.2下编译安装git

    centos最新的7.2版本,git居然是1.8,而最新的git版本是2.9 差的太多了,何况git2.0后有大更新.于是,我决定编译安装.中间有一点小破折,记录一下,备忘. 1,下载最新的源码,网址 ...

  6. Lua __index元方法

    [Lua __index元方法] 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键.如果__ ...

  7. widows下jieba分词的安装

    在切词的时候使用到jieba分词器,安装如下: 切入到结巴包,执行 python setup.py install 安装后,可以直接在代码中引用: import jieba

  8. python获取DBLP数据集

    #!/usr/bin/python # -*- coding: UTF-8 -*- import xml.sax import io, sys paper_tags = ('article', 'in ...

  9. Python全栈之路-----基础篇

    Python诞生 Python是著名的”龟叔“Guido van Rossum(吉多·范罗苏姆)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python语法很多来自C,但又受到 ...

  10. ABAP QUERY报表添加双击事件

    问题:一个query报表程序,客户想要每一条能编辑并打印. 解决:直接给query添加双击事件,调用新report. 1.创建report,用paramater定义要从query结果中传过来的数据. ...