enum类型的使用

需要继续研究。。。。。。。

    创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

public  enum  EnumTest {
     MON, TUE, WED, THU, FRI, SAT, SUN;
}

这段代码实际上调用了7次 Enum(String name, int ordinal):

new  Enum<EnumTest>( "MON" , 0 );
new  Enum<EnumTest>( "TUE" , 1 );
new  Enum<EnumTest>( "WED" , 2 );
int compareTo(E o) 

          比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String name() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

           返回枚举常量的名称,它包含在声明中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 
          返回带指定名称的指定枚举类型的枚举常量。

public enum EnumTest {
    MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {
        @Override
        public boolean isRest() {
            return true;
        }
    },
    SUN(0) {
        @Override
        public boolean isRest() {
            return true;
        }
    };
 
    private int value;
 
    private EnumTest(int value) {
        this.value = value;
    }
 
    public int getValue() {
        return value;
    }
 
    public boolean isRest() {
        return false;
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue());
    }
}
输出结果:
EnumTest.FRI 的 value = 5

 
 

public enum Gender {
	MAN{
		public String getTitle(){return "男";}		
	},
	WOMAN{
		public String getTitle(){return "女";}			
	},
	BOTH{
		public String getTitle(){return "男女均可";}			
	};
	public abstract String getTitle();
	public String getValue()
	{
		return this.name();
	}
}

public class GenderTest {

	public static void main(String[] args) throws Exception{
		
		System.out.println(
				BeanUtils.getProperty(Gender.MAN, "title")
		);

		Object bean = Gender.MAN;
		BeanInfo beanInfo = null;
		try {
			beanInfo = Introspector.getBeanInfo(bean.getClass());
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	
		PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor property:properties)
		{
			if(property.getName().equals("title")) // 可以换为value后输出值为MAN
			{
				Method method = property.getReadMethod();
				//值得研究
				System.out.println(method.isAccessible()); // false
				method.setAccessible(true);
				Object retVal;
				try {
					retVal = method.invoke(bean, null);
    				System.out.println(retVal);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}				
	}

}

输出结果如下:


false
MAN








发布了167 篇原创文章 · 获赞 321 · 访问量 58万+

猜你喜欢

转载自blog.csdn.net/mazhimazh/article/details/38921505
今日推荐