Java枚举类型的使用

本文介绍了Java中的枚举类型,强调了其作为固定常量集合的特点,并提供了简单的枚举类型示例。枚举类型可以拥有构造器、方法和字段以实现更复杂的行为。在使用枚举时,推荐使用实例域代替序数来获取枚举常量的编号,以提高代码的健壮性。此外,文章提到了《Effective Java》中对此的详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举类型

枚举类型是指有由一组固定的常量组成合法值的类型,比较适合有限且固定的类型,比如衣服尺寸(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<E>

方法名解释
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值