需要继续研究。。。。。。。
创建枚举类型要使用 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