【转载】Java枚举的使用
枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。枚举类型本质上还是以类的形式存在。
1、使用枚举类型设置常量
以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用了,并且该常量不能被修改,因为在接口中定义的常量时,该常量的修饰符为final与static。
public interface Constants
{
public static final int RED = 1;
public static final int BLUE = 2;
public static final int GREEN = 3;
}
使用枚举定义常量的语法如下:
public enum ColorEnum
{
RED,
BLUE,
GREEN
}
命名规范:
final常量:使用大写字母命名,并且中间使用下划线进行连接。
enum枚举:使用大写字母命名,并且中间使用下划线进行连接。
示例:枚举类型的使用。
public static void doit(ColorEnum c)
{
switch (c)
{
case RED:
System.out.println("This is RED");
break;
case BLUE:
System.out.println("This is BLUE");
break;
case GREEN:
System.out.println("This is GREEN");
break;
default:
break;
}
} public static void main(String[] args)
{
doit(ColorEnum.RED);
}
2、深入了解枚举类型
枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。
2.1 操作枚举类型成员的方法
用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员默认都被final、public、static所修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。
由于枚举类型对象继承与java.lang.Enum类,所以该类中一些操作枚举类型的方法都可以应用到枚举型中。
枚举类型的常用方法:
方法名称 具体含义 使用方法
values() 该方法可以将枚举类型成员以数组的形式返回 枚举类型名称.values()
valueOf() 该方法可以实现将普通字符串转换为枚举实例 枚举类型名称.valueOf("ABC")
compareTo() 该方法用于比较两个枚举对象在定义时的顺序 枚举对象.compareTo()
ordinal() 该方法用于得到枚举成员的位置索引 枚举对象.ordinal()
(1)values()方法
该方法可以将枚举类型成员以数组的形式返回,也可以通过该方法获取枚举类型的成员。
示例:使用枚举类型中的values()方法获取枚举类型中的成员变量。
/**
* 使用枚举类型中的values()方法获取枚举类型中的成员变量
*
* @author pan_junbiao
*
*/
public class ShowEnum
{
enum ColorEnum
{
RED, BLUE, GREEN
} // 循环由values()方法返回的数组
public static void main(String[] args)
{
System.out.println("方式一:");
for (int i = 0; i < ColorEnum.values().length; i++)
{
// 将枚举成员变量打印
System.out.println("枚举类型成员变量:" + ColorEnum.values()[i]);
} System.out.println("方式二:");
for (ColorEnum c : ColorEnum.values())
{
// 将枚举成员变量打印
System.out.println("枚举类型成员变量:" + c);
}
}
}
执行结果:
(2)valueOf()与compareTo()方法
枚举类型中静态方法valueOf()可以实现将普通字符串转换为枚举实例,而compareTo()方法用于比较两个枚举对象在定义时的顺序。
示例:枚举中valueOf()与compareTo()方法的使用。
/**
* 枚举中valueOf()与compareTo()方法的使用
*
* @author pan_junbiao
*
*/
public class EnumMethodTest
{
enum ColorEnum
{
RED, BLUE, GREEN
} // 定义比较枚举类型方法,参数类型为枚举类型
public static void compare(ColorEnum c)
{
// 根据values()方法返回的数组做循环操作
for (int i = 0; i < ColorEnum.values().length; i++)
{
// 将比较结果返回
System.out.println(c + "与" + ColorEnum.values()[i] + "的比较结果为:" + c.compareTo(ColorEnum.values()[i]));
}
} public static void main(String[] args)
{
// 使用valueOf()将字符串转换为枚举实例
ColorEnum c = ColorEnum.valueOf("BLUE");
compare(c);
}
}
执行结果:
说明:调用compareTo()方法返回的结果,正值代表方法中的参数在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。
(3)ordinal()方法
该方法用于得到枚举成员的位置索引。
示例:枚举中ordinal()方法的使用。
/**
* 枚举中ordinal()方法的使用
*
* @author pan_junbiao
*
*/
public class EnumOrdinalTest
{
public enum ColorEnum
{
RED, BLUE, GREEN
} public static void main(String[] args)
{
for (int i = 0; i < ColorEnum.values().length; i++)
{
// 在循环中获取枚举类型成员的索引位置
System.out.println(ColorEnum.values()[i] + "在枚举类型中位置索引值" + ColorEnum.values()[i].ordinal());
}
}
}
执行结果:
2.2 枚举类型中的构造方法
在枚举类型中,可以添加构造方法,但是规定这个构造方法必须为private修饰符修饰。
示例:在枚举类型中,可以添加构造方法。
/**
* 在枚举类型中添加构造方法
*
* @author pan_junbiao
*
*/
public class EnumIndexTest
{
enum ColorEnum
{
RED(1, "我是红色"), BLUE(2, "我是蓝色"), GREEN(3, "我是绿色"); private final int value;
private final String description; private ColorEnum(int value, String description)
{
this.value = value;
this.description = description;
} public int getValue()
{
return this.value;
} public String getDescription()
{
return this.description;
} public static ColorEnum valueOf(int value)
{
switch (value)
{
case 1:
return ColorEnum.RED;
case 2:
return ColorEnum.BLUE;
case 3:
return ColorEnum.GREEN;
default:
return null;
}
}
} public static void main(String[] args)
{
for (ColorEnum c : ColorEnum.values())
{
System.out.println("枚举成员:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription());
} System.out.println("值转换成枚举:" + ColorEnum.valueOf(2));
System.out.println("字符串转换成枚举:" + ColorEnum.valueOf("GREEN"));
}
}
执行结果:
2.3 枚举中实现接口
除了可以使用上述示例的方法定义getDescription()方法获取枚举类型成员变量是的描述之外,还可以将这个getDescription()方法放置在接口中,使枚举类型实现接口,然后使每个枚举类型实现接口中的方法。
示例:在项目中创建d接口和枚举类型的AnyEnum类,在枚举类型AnyEnum类中实现带方法的接口,使每个枚举类型成员实现该接口中的方法。
interface d
{
public int getValue(); public String getDescription();
} /**
* 枚举中实现接口
*
* @author pan_junbiao
*
*/
public enum AnyEnum implements d
{
RED
{
public int getValue()
{
return 1;
} public String getDescription()
{
return "我是红色";
}
}, BLUE
{
public int getValue()
{
return 2;
} public String getDescription()
{
return "我是蓝色";
}
}, GREEN
{
public int getValue()
{
return 3;
} public String getDescription()
{
return "我是绿色";
}
}; public static void main(String[] args)
{
for (AnyEnum c : AnyEnum.values())
{
System.out.println("枚举成员:" + c + " 值:" + c.getValue() + " 描述:" + c.getDescription());
}
}
}
执行结果:
3、使用枚举类型的优势
枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它具有以下特点:
(1)类型安全。
(2)紧凑有效的数据定义。
(3)可以和程序其他部分完美交互。
(4)运行效率高。
---------------------
作者:pan_junbiao
来源:CSDN
原文:https://blog.csdn.net/pan_junbiao/article/details/85257445
版权声明:本文为博主原创文章,转载请附上博文链接!
【转载】Java枚举的使用的更多相关文章
- 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)
java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...
- [转载] Java中枚举类型的使用 - enum
目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...
- 【转载】Java枚举类型的使用
枚举类型概念 package com.lxq.enumm; public class EnumDemoOne { private enum InnerEnum { RED, GREEN, YELLOW ...
- Java枚举类使用
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- java枚举中常见的7中用法
2016年08月11日 11:14:45 李学凯 原文链接https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的 ...
- Java枚举的用法和原理深入
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843644.html 一:枚举的用法 1.定义和组织常量 在JDK1.5之前,我们定义常量都是:publi ...
- Java枚举使用笔记
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11833790.html Java枚举简单使用示例: package com.shineyue. ...
- Java 枚举用法详解
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
随机推荐
- Mysql -- The used SELECT statements have a different number of columns
这是因为使用union的两个SQL语句产生的记录的表结构不一致. 必须是结构完全一致的记录集合才可以使用UNION. 以上就是两个表的字段不一样,导致,所以大家可以检查下. 可以 将 select * ...
- NLP 文本预处理
1.不同类别文本量统计,类别不平衡差异 2.文本长度统计 3.文本处理,比如文本语料中简体与繁体共存,这会加大模型的学习难度.因此,他们对数据进行繁体转简体的处理. 同时,过滤掉了对分类没有任何作用的 ...
- GIS 空间分析案例分析-错误排除经验总结
GIS 空间分析案例分析-错误排除经验总结 商务科技合作:向日葵,135—4855__4328,xiexiaokui#qq.com 目录:问题发现,问题分析,解决方法,结果 1. problem di ...
- VUE知识点小记
.if里面不能用import方式导入,只能用require方式引入 判断长度大于0 getIssues (vue, data) { let label = '' ) { label = `+label ...
- 015-命令行下载安装brew
一.brew 1.安装Homebrew 安装命令: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst ...
- EasyUI动态展示用户信息
业务需求:用户登录后展示用户名.用户对应的角色.EasyUI只不过是一个前端的框架,封装了一些组件和样式,你可以用jsp直接调后台获取到用户信息展示,但我这里想用html页面,用目前流行的说法:前后端 ...
- iOS 百度地图报私有api的解决方案
1.Build Settings-->搜索other linker Flags-->将other linker Flags设置为-objc 2.用2.1.1的版本的百度地图 3.换高德地图
- MapReduce\Tez\Storm\Spark四个框架的异同
1) MapReduce:是一种离线计算框架,将一个算法抽象成Map和Reduce两个阶段进行 处理,非常适合数据密集型计算. 2) Spark:MapReduce计算框架不适合迭代计算和交互式计算, ...
- Mac下载工具软件提示损坏
今天装Navicat的时候一直报错文件损坏,最后请教别人才知道,这里记录下: 原因: Mac默认不允许任何来源的软件安装,安全问题,需要我们设置下即可: 解决方法: 方法一: 方法二: 终端输入命令: ...
- Python扫描器-常用库-Request
1.常用库-Request 1.1. 介绍 #安装:pip3 install requests #各种请求方式:常用的就是requests.get()和requests.post() >> ...