栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java枚举类型的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java枚举类型的使用

枚举类型

枚举类型是指有由一组固定的常量组成合法值的类型,比较适合有限且固定的类型,比如衣服尺寸(S、M、L)、季节等。
一个简单的枚举类型如下所示:

public enum Size{
	SMALL,
    MEDIUM,
    LARGE,
    EXTRA_LARGE
}

这个枚举类型实际上只有四个实例,因此不可能构造新的对象。同时对于枚举类型的比较,可以直接使用==而不需要使用equals方法。
当然,枚举类型可以有更加复杂的行为,如果有需要可以为枚举类型添加构造器、方法以及字段。

public enum Size{
    SMALL("S"),
    MEDIUM("M"),
    LARGE("L"),
    EXTRA_LARGE("XL");

    private String s;

    Size(String s) {
        this.s = s;
    }

    public String getS() {
        return this.s;
    }
}

其中,构造方法只在构造枚举常量时调用,因此该构造方法默认是私有的,如果声明为public会出现语法错误,这里省略不写private。
那么如何对枚举类型进行访问呢?请看下面的例子

public class Demo {
    public static void main(String[] args) {
        String input = "SMALL";
        // 对于小写的输入可以使用input.toUpperCase()方法将字符串转为大写
        Size size = Enum.valueOf(Size.class, input);
        System.out.println("size = "+size);
        System.out.println("s = "+size.getS());
        if (size==Size.SMALL) {
            System.out.println("The size is SMALL");
        }
		
		// 使用values()方法获得每一个枚举类型数组
        Size[] sizes = Size.values();
        for (Size s : sizes) {
            System.out.println(s+"--"+s.getS());
        }
    }
}

所有的枚举类型都是继承自Enum,因此可以使用Enum的一些有用的方法。
java.lang.Enum

方法名解释
static Enum valueOf(Class enumClass, String name)返回给定类型中有指定类型的枚举常量
public String toString()返回枚举常量名
public final int ordinal()返回枚举类型在enum声明中的位置,从0开始
public final int compareTo(E o)枚举常量出现在o之前返回一个负整数;如果this==other,则返回0;否则,返回一个正整数
枚举类使用注意事项

这一部分参考Effective Java,详细的解释可以参考该书

使用实例域代替序数

我们在使用枚举的时候可能面对这样一种场景:我们想要知道这个枚举类型的序数或者说知道这个枚举类型是编号第几个(比如SMALL、MEDIUM、LARGE、EXTRA_LARGE分别编号1、2、3、4)
不建议的写法:

public enum Size {
    SMALL,
    MEDIUM,
    LARGE,
    EXTRA_LARGE;

    public int number() {
    	return ordinal()+1;
    }
}

该种方法可以实现功能。但是如果面对常量重新排序,number()方法就会出错。
推荐写法:

public enum Size {
    SMALL(1),
    MEDIUM(2),
    LARGE(3),
    EXTRA_LARGE(4);

	private final int numberOfSize;
	Size(int size) {
		this.numberOfSize = size;
	}
    public int number() {
    	return this.numberOfSize;
    }
}

参考:
1、Java核心技术I
2、Effective Java

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号