浅谈java枚举类

先来一段常用枚举类代码结构

public enum Color {
    //枚举对象
    RED(1,"红色"),GREEN(2,"绿色"),BLUE(3,"蓝色");
    
    //私有成员属性
    private int index;
    private String name;
    
    //私有构造方法
    private Color(int index, String name) {
        this.index = index;
        this.name = name;
    }
    
    //公共的get方法
    public int getIndex() {
        return index;
    }

    public String getName() {
        return name;
    }
    
    //获取某实例的静态方法
    public static Color getInstance(int num) {
        Color[] values = Color.values();
        for(Color c : values) {
            if(c.getIndex() == num) {
                return c;
            }
        }
        throw new IllegalArgumentException("没有这种颜色");
    }

    
}

从上面的代码中可以看出枚举的常用结构为:1.枚举实例对象,2.如果有属性就添加私有成员变量。3.构造方法为私有的,防止再创建其他实例对象。4.只有get方法,防止修改原对象的属性值。5,其他方法,比如根据某个属性获取对象实例

下面再深入看看枚举类中一些隐藏的东西

1.枚举类都隐式的继承自java.util.Enum类,如果你显示的继承则无效

2.枚举类中都有一些基本的方法,包括 

  values():返回enum实例的数组,而且该数组中的元素严格保持在enum中声明时的顺序。

  name():返回实例名。

  ordinal():返回实例声明时的次序,从0开始。

  getDeclaringClass():返回实例所属的enum类型。

  equals() :判断是否为同一个对象。

  compareTo():比较方法,因为Enum类实现了Comparable和Serializable接口

  看如下代码

  枚举类

public enum Color {
    RED,GREEN,BLUE,YELLOW,ORANGE;
}

  测试类

public class EnumTest {
    public static void main(String[] args) {
        Color[] values = Color.values();
        for(Color c :values) {
            System.out.print(c.name()+"---");
            System.out.print(c.ordinal()+"---");
            System.out.println(c.getDeclaringClass());
        }
        
    }
}

  测试结果

RED---0---class com.pancras.test.Color
GREEN---1---class com.pancras.test.Color
BLUE---2---class com.pancras.test.Color
YELLOW---3---class com.pancras.test.Color
ORANGE---4---class com.pancras.test.Color

还有其他更多用法等你来发现

参考资料:https://www.cnblogs.com/jingmoxukong/p/6098351.html

原文地址:https://www.cnblogs.com/coffee9527/p/8707568.html