注解与枚举类

  1. 枚举类的使用

类的对象只有有限个,确定的,如星期、性别、季节、支付方式、就职状态、订单状态、线程状态。
当需要定义一组常量时,强烈建议使用枚举类。
当枚举类中只有一个对象,则可以视为单例模式的实现方式之一。

1)如何自定义枚举类

JDK5.0之前,自定义枚举类。
a. 对象的属性都要private final修饰。(显示赋值、代码块赋值、构造器赋值,这里应该在构造器赋值可以让每个对象属性不同)
b. 私有化构造器
c. 提供枚举类的多个对象
d. 其他诉求:get()方法、toString()方法

class Season {
    //属性必须用private final修饰
    private final String name;
    private final String desc;

    //私有化构造器,并给对象属性赋值
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    //提供枚举类的多个对象
    public static final Season SPRING = new Season("春天", "春意盎然");
    public static final Season SUMMER = new Season("夏天", "夏日炎炎");
    public static final Season AUTUMN = new Season("秋天", "秋高气爽");
    public static final Season WINTER = new Season("冬天", "冬雪新年");
}

2)如何使用enum关键字定义枚举类

JDK5.0以后,使用enum关键字,该类默认继承于java.lang.Enum类

a. 首先提供多个对象,用逗号隔开,最后用分号。
b. 正常提供属性、构造器、get()方法等。
c. toString()默认已经被重写过。(仍可根据需要再次重写)

enum Season1 {

    SPRING("春天", "春意盎然"),
    SUMMER("夏天", "夏日炎炎"),
    AUTUMN("秋天", "秋高气爽"),
    WINTER("冬天", "冬雪新年");


    //属性必须用private final修饰
    private final String name;
    private final String desc;

    //私有化构造器,并给对象属性赋值
    Season1(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

3)Enum类的主要方法

values(): 返回数组,包含当前类的全部对象。
valueOf(String str): 传入对象名字,返回该对象。如果传入的名字不存在,则抛出异常。
toString(): 默认为枚举类对象的名称。

4)实现接口的枚举类

情况一:实现接口,在enum类中实现抽象方法。

情况二:enum类中的每一个对象分别实现抽象方法(直接在每个对象后面用{ }实现抽象方法)。

  1. 注解的使用Annotation

1)注解概述
注解是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。
框架 = 注解 + 反射 + 设计模式

2)常用示例
示例一:java文档注释中@author @param @return 等等
示例二:编译时进行格式检查,三个基本注解:@override @Depracated @ SuppressWarnings
示例三:跟踪代码依赖性,实现替代配置文件的功能:@WebServlet("/login") 替代XML配置文件

3)自定义注解

声明为@interface
内部定义成员,通常使用value表示
可以指定成员变量的默认值,使用default
如果自定义注解没有成员,则为标识作用
如果有成员,则在使用注解时,需要指明成员的值。

4)JDK中的元注解
用于修饰其他Annotation的注解:meta-annotaion(元注解),注解的注解
Retention:指明所修饰的Annotation的生命周期(SOURCE,CLASS(默认),RUNTIME),只有声明为RUNTIME生命周期的注解,才能通过反射获取。
Target:修饰Annotation的定义,用于指定被修饰的Annotation能用于修饰程序中的哪些元素(TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE)。
Documented:用于指定所修饰的Annotation类将被javadoc工具提取为文档。
Inherited:被它修饰的Annotation将具有继承性,父类带此注解,则子类也带有该注解。

自定义注解通常会指明Retention和Target.

5)利用反射获取注解信息

6)JDK8注解新特性
可重复注解:
①在MyAnnotation上声明一个@Repeatable,成员之为MyAnnotations.class
②MyAnnotation的Target和Retention等元注解和MyAnnotations相同

类型注解:
ElementType.TYPE_PARAMETER: 注解可修饰泛型
ElementType.TYPE_USE: 注解可修饰类型

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

KevinC0211

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值