前言
本文主要讲解Java的其他两个重要的技术点:枚举类(Enum)和注解(Annotation),这两个在平时开发中经常用于公共工程。
枚举类是一种特殊的类,用于定义一组常量(final variables)。通过使用enum关键字定义枚举类,每个枚举常量都是枚举类的一个实例,并且具有名称和值。枚举类可以直接使用其常量值,也可以通过调用其方法获取相关信息。
注解(Annotation)是Java 5引入的一个特性,它是一种元数据机制,用于提供有关代码的附加信息。注解不会直接影响代码的运行,但可以被编译器、运行时环境或框架使用,以实现各种功能。常见的注解示例包括@Override、@Deprecated、@SuppressWarnings等。要自定义注解,需要创建一个接口或抽象类,并使用@Target和@Retention注解来指定该注解可以用于哪些元素,并指定该注解在运行时是否可用
一、Java枚举类Enum
1.自定义枚举类
在Java中,枚举是一种特殊的类,它用于定义一组常量(final variables)。枚举类是通过关键字enum来定义的,每个枚举常量都是枚举类的一个实例,并且具有名称和值。
以下是一个自定义枚举类的示例:
代码语言:javascript复制public enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
在这个例子中,Season是一个枚举类,SPRING、SUMMER、AUTUMN和WINTER是它的四个常量。
2.使用枚举类
枚举类可以直接使用其常量值,也可以通过调用其方法获取相关信息。
例如,使用上述的Season枚举类,我们可以这样使用:
代码语言:javascript复制Season currentSeason = Season.SUMMER;
System.out.println(currentSeason.name()); // 输出 SUMMER
System.out.println(currentSeason.compareTo(Season.SUMMER)); // 输出 0
3.Enum类的主要方法
- name():返回该枚举常量的名称。
- valueOf(String name):返回指定名称的枚举常量。
- compareTo(E o):比较该枚举常量与指定枚举常量的顺序。
- values():返回所有可能的枚举常量。实现接口的枚举类
二、注解(Annotation)概述
注解是Java 5引入的一个特性,它是一种元数据机制,用于提供有关代码的附加信息。注解不会直接影响代码的运行,但可以被编译器、运行时环境或框架使用,以实现各种功能。
注解在语法上是一种接口的成员,可以是方法、构造函数、字段或类。它们通常被用于提供元数据,例如标记代码的特定部分、约束类型、配置运行时行为等。
1.常见的Annotation示例
- @Override:标记一个方法是重写父类的方法。
- @Deprecated:标记一个方法或类已经过时,建议不要使用。
- @SuppressWarnings:抑制编译器对特定警告的警告。
- @Autowired:来自Spring框架,自动装配bean依赖。
- @PreAuthorize和@PostAuthorize:来自Spring Security框架,用于安全性的注解。
2.自定义Annotation
要自定义Annotation,需要遵循以下步骤:
- 创建一个接口或抽象类,用作注解的基类。
- 使用@Target和@Retention注解来指定该注解可以用于哪些元素(例如方法、类等),并指定该注解在运行时是否可用。
- 为注解添加属性,以便提供更多信息。可以使用Java的基本类型、枚举类型、Class类型、字符串、集合等类型作为注解的属性。可以使用default来设置属性的默认值。
- 创建一个实现了该接口的类,并重写其方法。在需要使用该注解的地方使用该类即可。
下面是一个自定义Annotation的示例:
代码语言:javascript复制import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
String value() default "default value";
int number() default 0;
}
这个自定义Annotation可以用于标记方法,并为其提供value和number两个属性。默认情况下,value为"default value",number为0。在运行时,可以通过反射获取这些属性的值。
总结
Java枚举类(Enum)和注解(Annotation)都是Java语言中重要的特性,它们提供了一种方便的方式来定义常量、提供元数据信息和实现各种功能。一般开发中都会定义成公共的部分,其他工程共享调用,实现“低耦合”。
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表