步骤
声明自定义枚举类对象的属性:private final
私有化类的构造器,并给对象属性赋值
提供当前枚举类的多个对象: public static final 的
其他诉求如: 获取枚举类对象的属性, toString方法等
class Season {
//1.
private final String seasonName;
private final String seasonDesc;
//2.
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//3.
public static final Season SPRING = new Seanson("春天","春暖花开");
public static final Season SUMMER = new Seanson("夏天","夏日炎炎");
public static final Season AUTUMN = new Seanson("秋天","秋高气爽");
public static final Season WINTER = new Seanson("冬天","冰天雪地");
//4.
//getters(),toString()等方法
}
步骤
提供当前枚举类的对象,多个对象逗号间隔,最后用分号结尾。
声明自定义枚举类对象的属性:private final
提供当前枚举类的多个对象: public static final 的
其他诉求如: 获取枚举类对象的属性, toString方法等
enum Season {
//1
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冰天雪地");
//2.
private final String seasonName;
private final String seasonDesc;
//3.
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
//4.
//getters(),toString()等方法
//如获取季节信息
public String getInfo() {
return "Name:" + this.seasonName + "Desc:" + this.seasonDesc;
}
}
public class enumTest {
@Test
public void test() {
Season spring = Season.SPRING;
System.out.println(spring.getInfo());
}
}//运行结果:Name:春天Desc:春暖花开
方法名 | 详细描述 |
---|---|
value | 返回枚举类型的对象数组。该方法可以方便的遍历所有的枚举值。 |
valueOf | 传递枚举类型的 Class 对象和枚举常量名称给静态方法 valueOf, 会得到与参数匹配的枚举常量。 |
toString | 得到当前枚举常量的名称。(可重写以增加易读性) |
equals | 枚举类型可直接使用 == 来比较两个枚举常量是否相等。Enum类种的equals方法就是用 == 实现的 |
hashCode | Enum 实现了 hashCode() 来和 equals 保持一致。他也是不可变的. |
getDeclaringClass | 得到枚举常量所属枚举类型的 Class 对象。可以用他来判断两个枚举常量是否属于同一个枚举类型. |
name | 得到当前枚举常量的名称。建议优先使用toString() |
ordinal | 得到当前枚举常量的次序 |
compareTo | 枚举类型实现了 Comparable 接口.可比较两个枚举类型的大小(按照声明的顺序排列) |
clone | 枚举类型不能被 Clone。为了防止子类实现克隆方法, Enum实现了一个仅抛出 CloneNotSupportedException 异常的不变clone() |
情况一: 实现接口, 在enum类种实现抽象方法
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
public class enumTest {
@Test
public void test() {
}
}
interface info {
void show();
}
enum Season implements info{
SPRING("春天","春暖花开"),
SUMMER("夏天","夏日炎炎"),
AUTUMN("秋天","秋高气爽"),
WINTER("冬天","冰天雪地");
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
@Override
public void show() {
System.out.println("这是Season枚举类");
}
}
情况二: 让枚举类的对象分别实现接口中的抽象方法
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
interface info {
void show();
}
enum Season implements info{
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("春天在哪里");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("宁夏");
}
},
AUTUMN("秋天","秋高气爽"){
@Override
public void show() {
System.out.println("秋天不回来");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("大约在冬季");
}
};
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
}
public class enumTest {
@Test
public void test() {
Season[] value = Season.values();
for (int i = 0; i < value.length; i++) {
value[i].show();
}
}
}
使用 Annotation 时要在前面增加 @ 符号,并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元素。
部分生成文档相关的注解
@author 标明开发该类模块的作者,多个作者之间使用,分割@version标明该类模块的版本
@see参考转向,也就是相关主题
@since从哪个版本开始增加的
@param对方法中某参数的说明,如果没有参数就不能写
@return对方法返回值的说明,如果方法的返回值类型是void就不能写
@exception对方法可能抛出的异常进行说明,如果方法没有用throws显式抛出的异常就不能写
在编译时进行格式检查(JDK内置的三个基本注解)
跟踪代码依赖性,实现替代配置文件功能
JDK 的元 Annotation 用于修饰其他 Annotation 定义
JDK 5.0 提供了4个标准的 meta-annotation 类型,分别是:
Retention:只用于修饰一个 Annotation 定义,用于指定该 Annotation 的生命周期,@Rentention 包含一个 RetentionPolicy 类型的成员边聊,使用@Rentention 时必须为该 value 成员变量指定值:
Target:用于指定被修饰的 Annotation 能用于修饰哪些程序元素。@Target 也包含一个名为 value 的成员变量
取值(ElementType) | 取值(ElementType) | ||
---|---|---|---|
CONSTRUCTOR | 用于描述构造器 | PACKAGE | 用于描述包 |
FIELD | 用于描述域 | PARAMETER | 用于描述参数 |
LOCAL_VARIABLE | 用于描述局部变量 | TYPE | 用于描述类、接口(包括注解类型)或enum声明 |
METHOD | 用于描述方法 |
Documented:被它修饰的 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档。默认情况下,javadoc 是不包括注解的。
Inherited:被它修饰的 Annotation 将具有继承性。如果某个类使用了被 @Inherited 修饰的 Annotation,则其子类具有该注解。
原文:https://www.cnblogs.com/Olenz/p/14371545.html