枚举类型

Java 枚举(enum)类型详解

流过昼夜 提交于 2020-02-07 07:37:38
文章目录 枚举 枚举的定义 深入了解枚举类型 操作枚举类型成员的方法 枚举类型中的构造方法 枚举 枚举是 JDK 1.5 中新增的数据类型,取值范围有限,是可以枚举出来的,比如:一周有 7 天,性别有 男、女等。虽然定义类也可以实现,但枚举更简洁、方便。 枚举的定义 没有枚举类型时,定义常量常见的方式如下: package demo03 ; /** * jdk 1.5 以前,定义常量的方式 */ public class ColorConstants { public static final int RED = 1 ; public static final int GREEN = 2 ; public static final int BLUE = 3 ; } 枚举类型: package demo03 ; /** * 颜色枚举 * 命名规范: 以 Enum 结尾 */ public enum ColorEnum { RED , GREEN , BLUE } 深入了解枚举类型 操作枚举类型成员的方法 方法名称 具体含义 使用方法 values() 将枚举类型成员以数组的形式返回 枚举类型名称.values() valueOf() 将普通字符串转换为枚举实例 枚举类型名称.valueOf(“abc”) compareTo() 比较两个枚举对象在定义时的顺序 枚举对象

TypeScript真香系列-枚举

你说的曾经没有我的故事 提交于 2020-02-06 14:06:20
前言 TypeScript真香系列的内容将参考 中文文档 ,但是文中的例子基本不会和文档中的例子重复,对于一些地方也会深入研究。另外,文中一些例子的结果都是在代码没有错误后编译为JavaScript得到的。如果想实际看看TypeScript编译为JavaScript的代码,可以访问TypeScript的 在线编译地址 ,动手操作,印象更加深刻。 概念 枚举是对JavaScript标准数据类型集的扩充,常被用来限定在一定范围内取值的场景。在TypeScript中支持数字和字符串的枚举。我们可以用 enum 来实现。 数字枚举 先看看一个数字枚举例子: enum Basketballer { Yao , Yi , Wang } Basketballer . Yao ; //0 Basketballer . Yi ; //1 Basketballer . Wang ; //2 我们也可以这样,下面这个方法被称为反向映射,即通过值来访问键: Basketballer [ 0 ] ; //"Yao" Basketballer [ 1 ] ; //"Yi" Basketballer [ 2 ] ; //"Wang" Basketballer [ 3 ] ; //undefined 上面的例子,我们没有对Yao或者其它成员进行初始化,如果我们进行初始化: enum Basketballer {

求两个Date之间的天数

北城以北 提交于 2020-02-06 03:23:41
利用JDK1.8的新特性,ChronoUnit类获取两个日期之间的天数只差 ChronoUnit是一个枚举类,有一组标准的时间周期为单元的枚举值,它的枚举值是不变的,线程安全的。使用between()方法获取两个日期之间的天数差,当然不仅仅可以获取天数差,可以获取这个枚举类中任意一个给出的时间单元的间隔,如毫秒数,秒数,分钟数,天数,月数,年数等。 between(Temporal temporal1Inclusive, Temporal temporal2Exclusive) between()方法求两个日期之间的天数差,左侧的参数是包含的,右侧的参数不包含,相当于一个左闭右开区间。具体使用方式 //将Date类型的格式转换为LocalDate类型 Instant instantStart = startDate.toInstant(); ZonedDateTime zonedDateTimeStart = instantStart.atZone(ZoneId.systemDefault()); LocalDate localDateStart = zonedDateTimeStart.toLocalDate(); Instant instantEnd = endDate.toInstant(); ZonedDateTime zonedDateTimeEnd =

一些杂碎的小知识点

北战南征 提交于 2020-02-06 02:26:36
一. mybatis SQL转义    &lt; --> < &gt; --> > &amp; -----> & &quot; ----> " 二. @Resource 和@Autowored区分    1> @Resource 注解 由J2EE提供 @Autowired 是由Spring提供 减少系统对Spring依赖建议使用@Resource    2> @Resource默认按照名字装配 找不到名字 按类型装配 @Autowired默认按类型装配 若要用@Autowired来用名字装配与@Qualifier一起使用    3> @Resource和@Autowired可以标注在字段或者set()方法上 三. Enum枚举类   Enum中有很特殊的方法values(), 它可以把枚举类转变为枚举类型的数组,枚举中没有下标,但转变为数组后,我们就可以通过数组小标找到我们需要的枚举       来源: https://www.cnblogs.com/rcjs/p/9028189.html

【Java基础08】内部类、枚举类、日期和时间、Math、Random

妖精的绣舞 提交于 2020-02-06 02:01:26
1 内部类 1.1 概念 大部分时候,类被定义成一个独立的程序单元,在某些情况下,也会把一个类放到另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类被称为外部类。 1.2 作用 1.提供更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。 2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问。但外部类不能访问内部类的实现细节,例如内部类的成员变量。 3.匿名内部类适合用于创建那些仅需要一次使用的类。 注意: 1.内部类比外部类可以多使用三个修饰符:private、protected、static,外部类不可以使用这三个修饰符。 2.非静态内部类不能拥有静态成员。 1.3 非静态内部类 成员内部类分为两种,静态内部类和非静态内部类,使用static修饰的成员内部类是静态内部类,没有使用static修饰的成员内部类是非静态内部类。(在方法中定义的内部类被称为局部内部类) 不允许在外部类的静态成员中直接使用非静态内部类,不允许在非静态内部类中定义静态成员。非静态内部类里不能有静态方法、静态成员变量、静态初始化块。 1.4 静态内部类 如果使用static来修饰一个内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象。因此使用static 修饰的内部类被称为类内部类

【Java】 Java中枚举类型的的作用与本质

痞子三分冷 提交于 2020-02-06 01:23:34
在涉及到使用大量需要标记的内容的时候,我们一般选择使用枚举类型来快速定义内容,但是不仅仅是因为快速,同时使用枚举类型更加的安全. 引入: 举个例子: 现在需要来不使用枚举来表示一周七天用来安排放假时间我们如何在程序中表达: 首先是对一个星期的每一天进行定义 方法A: class week { static int Monday = 1 ; static int Tuesday = 2 ; static int Wednesday = 3 ; static int Thursday = 4 ; static int Friday = 5 ; static int Saturday = 6 ; static int Sunday = 7 ; } 方法B: class week { final static int Monday = 1 ; final static int Tuesday = 2 ; final static int Wednesday = 3 ; final static int Thursday = 4 ; final static int Friday = 5 ; final static int Saturday = 6 ; final static int Sunday = 7 ; } 方法C: class week { final static week

枚举

浪子不回头ぞ 提交于 2020-02-05 18:49:08
枚举 枚举的概述: 枚举是在一定范围内取值,并且这个值必须是枚举类型中的任意一个,并且只能有一个。 特点: 1.必须在规定范围内取值 2.这个值只能取一个 3.这个值可以是规定范围内的任意一个 枚举的本质就是一个Java类 枚举的引入 获取枚举实例的三种方式 public enum Week { //枚举项(可以使用,但是避免使用中文) one ( "星期一" ) , two ( "星期二" ) , Three ( "星期三" ) , four ( "星期四" ) ; //定义属性 private String name ; //构造 public String getName ( ) { return name ; } //set get private Week ( String name ) { this . name = name ; } public void setName ( String name ) { this . name = name ; } } public class Test2 { public static void main ( String [ ] args ) { //获取枚举实例的三种方式 //1、通过枚举项获取枚举值 Week week = Week . four ; //输出four System . out . println (

阅读《Effective Java》每条tips的理解和总结(3)

半城伤御伤魂 提交于 2020-02-03 18:05:44
34 使用枚举类型替代整型常量 有时会遇到这样一些场景:要表示一组固定的常量值。如春夏秋冬、八大行星等等。我们最容易想到的是用几个int类型的常量表示,但是这样有许多问题要考虑: (1)一个数字没有直观的信息,特别是调试时打印出来用处不大。 (2)数字没有类型区分,容易有类型安全问题。如一个函数本来是接收春夏秋冬的某个,假设分别1 2 3 4表示,这时我们传参为5的话就会出现逻辑错误,但是程序不会报错增加隐患。 (3)不易拓展修改,一旦整型值表示的意义变化就需要较大改动,重新编译整个程序。比如之前是1表示春天,现在需要变为0表示春天,则我们需要去程序里把所有的1改成0。 不要想着用字符串代替数字,字符串也有上述问题,而且这样硬编码字符串写错了也是完全能编译成功从而导致运行时出错,且难以排查。 所以,这种场景就要用枚举类型了,枚举的好处如下: (1)Java的枚举很强大,是一个完整的类,可以有属性、构造函数、方法等,还有几个enum类型自带的方法,携带的信息全面,非常方便 (2)利于修改拓展。程序中使用春天这个枚举量都是直接使用SPRING,当春天的表示从1变为0时,只需要将枚举类SPRING枚举量的值改为0就行,不会影响使用SPRING枚举量的其他代码。 (3)枚举极为可靠,前面也说了它是单例模式的最佳实现。反射都不能破坏。因此,我们例举几个实例,这个枚举类就会有几个实例,不会出错

枚举实现接口——模拟可扩展的枚举

荒凉一梦 提交于 2020-02-03 04:47:44
枚举实现接口——模拟可扩展的枚举 文章目录 枚举实现接口——模拟可扩展的枚举 概要 一、带有抽象方法的枚举 二、定义一个接口 三、让枚举实现接口 四、测试枚举的两种方法 概要 虽然无法编写可拓展的枚举类型,却可以通过编写接口以及实现该接口的基础枚举类型来对它进行模拟。 一、带有抽象方法的枚举 public enum Operation { PLUS ( "+" ) { public double apply ( double x , double y ) { return x + y ; } } , MINUS ( "-" ) { @Override public double apply ( double x , double y ) { return x - y ; } } , TIMES ( "*" ) { @Override public double apply ( double x , double y ) { return x * y ; } } , DIVIDE ( "/" ) { @Override public double apply ( double x , double y ) { return x / y ; } } ; private final String symbol ; Operation ( String symbol ) { this .

c++11(2)-枚举类enum class

假装没事ソ 提交于 2020-02-02 05:49:15
enum class Enumeration { Val1 , Val2 , Val3 = 100 , Val4 /* = 101 */ , } ; 此种枚举为类型安全的。枚举类型不能隐式地转换为整数;也无法与整数数值做比较。 # include <iostream> using namespace std ; int main ( int argc , char * * argv ) { enum class Status { RUN , ERROR , FINISHED , START , STOP } ; Status proStatus1 { Status :: START } ; Status ProStatus2 { Status :: ERROR } ; Status nowStatus ; nowStatus = Status :: STOP ; for ( int i = 0 ; i < 2 ; i ++ ) { if ( nowStatus == Status :: STOP ) { nowStatus = Status :: START ; } else if ( nowStatus == Status :: START ) { nowStatus = Status :: RUN ; } } cout << ( long ) nowStatus ;