10 - 枚举和注解

道德一物,太高太虚了,终究是不能律人的,只能律己。

又故而立身需正,身正则名正,名正则言顺,言顺则事成。

1.枚举

不使用枚举创建四季

public class Enumeration01 {
    public static void main(String[] args) {
        // 实例化对象,创建四季
        Season spring = new Season("春天", "温暖");
        Season winter = new Season("冬天", "寒冷");
        Season summer = new Season("夏天", "炎热");
        Season autumn = new Season("秋天", "凉爽");
    }
}

// 定义季节类
class Season {
    private String name;
    private String desc;

    public Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

使用枚举创建四季(固定的值,并且是只读的不需要修改)

public class Enumeration03 {
    public static void main(String[] args) {
        System.out.println(Season2.AUTUMN);
        System.out.println(Season2.SUMMER);
    }
}

// 创建枚举类
enum Season2 {   
    SPRING("春天", "温暖"), 
    SUMMER("夏天", "炎热"),
    AUTUMN("秋天", "凉爽"), 
    WINTER("冬天", "寒冷");

    private String name;
    private String desc;

    private Season2() {
    }
    private Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }
    public String getDesc() {
        return desc;
    }

    /**
     * 通过传入的desc值获取对应的name值
     */
    public static String getNameByDesc(String desc)
    {
        for (Season2 type : Season2.values())
        {
            if (type.getDesc().equals(desc))
            {
                return type.getName();
            }
        }
        // 如果没有找到匹配的枚举值,可以返回null或抛出异常
        return null;
    }
}

注意

  • 不提供 setXxx() 方法,因为枚举对象值通常为只读。
  • 对枚举对象/属性使用 final + static 共同修饰,实现底层优化。
  • 枚举对象名通常使用全部大写,常量的命名规范。

2.注解

介绍

  • 用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
  • 在JavaSE中,注解的使用目的比较简单,如标记过时的功能,忽略警告等。在JavaEE中用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

2.1 基本的Annotation

三个基本的 Annotation

  1. @Override: 重写父类方法, 该注解只能用于方法
  2. @Deprecated: 用于表示某个程序元素(类, 方法等)已过时,可以做到新旧版本的兼容和过渡
  3. @SuppressWarnings: 抑制编译器警告

@Override使用示例

class Father{
    public void fly(){
        System.out.println("Father fly...");
    }
    public void say(){}
}

class Son extends Father {
    @Override 
    public void fly() {
        System.out.println("Son fly....");
    }
    @Override
    public void say() {}
}

@Deprecated使用示例

@Deprecated
class A {
    @Deprecated
    public int n1 = 10;
    @Deprecated
    public void hi(){
    }
}

@SuppressWarnings使用示例(直接抑制所有的警告)

@SuppressWarnings("all")
public class Test{
}

2.2 元注解

元注解用来修饰其它注解。

元注解的种类

  • @Retention:指定注解的作用范围,三种 SOURCE、CLASS、RUNTIME
  • @Target:指定注解可以在哪些地方使用
  • @Documented:指定该注解是否会在 javadoc 体现
  • @Inherited:子类会继承父类注解
@Retention

用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间

@Retention 的三种值

  1. RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释。
  2. RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中,当运行 Java 程序时,JVM 不会保留注解。
  3. RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中,当运行 Java 程序时, JVM会保留注解,程序可以通过反射获取该注解。

代码示例

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @Interface Override {
}
@Target

用于修饰 Annotation 定义,用于指定被修饰的 Annotation 能用于修饰哪些元素

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

// value的值
public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}
@Documented

用于指定被该注解修饰的 Annotation 类将被 javadoc工具提取成文档。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
@Inherited

被它修饰的 Annotation 将具有继承性。如果某个类使用了,则它的子类将自动具有该注解。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值