当前位置: 首页 > news >正文

【Java知识】java基础-开发一个自定义注解

文章目录

      • 注解的基本使用
      • 内置注解
      • 元注解
      • 自定义注解
      • 处理注解
      • 注意事项

Java注解(Annotations)是Java语言的一部分,用于为代码提供元数据。注解不会直接影响代码的执行,但可以通过反射(Reflection)在运行时被读取和处理。注解在Java 5中引入,用于替代某些传统上由配置文件或编译器指令完成的功能。

注解的基本使用

注解的使用非常简单,只需要在类、方法、字段或参数前加上特定的注解即可。例如:

@Override
public void methodName() {// 方法实现
}

这里的@Override注解表示该方法声明旨在覆盖超类中的方法。

内置注解

Java平台提供了一些内置注解,常用的包括:

  • @Override:表示当前方法是覆盖了父类中的方法。
  • @Deprecated:表示该元素(类、方法、字段等)已过时。
  • @SuppressWarnings:抑制编译器警告。
  • @SafeVarargs:指示可以安全地使用可变参数。
  • @FunctionalInterface:标记函数式接口。

元注解

元注解是用于注解其他注解的注解,它们定义了注解的属性和行为。常用的元注解包括:

  • @Retention:指定注解的保留策略,决定注解信息在什么级别可用(SOURCE、CLASS、RUNTIME)。
  • @Target:指定注解可以应用的Java元素类型(TYPE、METHOD、FIELD、CONSTRUCTOR、PARAMETER等)。
  • @Documented:表示注解应该被包含在JavaDoc中。
  • @Inherited:表示注解可以被继承。

自定义注解

自定义注解的创建需要遵循以下步骤:

  1. 使用@interface关键字定义注解。
  2. 使用元注解指定注解的目标和保留策略。
  3. 定义注解的属性。

例如,创建一个用于记录日志的自定义注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Loggable {String value() default "default";
}

使用自定义注解:

public class MathService {@Loggable(value = "计算方法")public int add(int a, int b) {return a + b;}
}

处理注解

要处理注解,通常需要使用反射API。以下是一个简单的示例,展示如何在运行时读取注解:

import java.lang.reflect.Method;public class AnnotationProcessor {public static void processAnnotations(Class<?> clazz) {for (Method method : clazz.getDeclaredMethods()) {if (method.isAnnotationPresent(Loggable.class)) {Loggable loggable = method.getAnnotation(Loggable.class);System.out.println("Method " + method.getName() + " has loggable annotation with value: " + loggable.value());}}}public static void main(String[] args) {processAnnotations(MathService.class);}
}

注意事项

  • 注解不能直接执行代码,它们只是提供元数据。
  • 注解的默认保留策略是CLASS,这意味着注解信息在运行时不可用,除非你指定为RUNTIME
  • 注解的默认目标是ElementType.TYPE,表示注解可以应用于类、接口(包括注释类型)或枚举声明。

通过使用注解,你可以为代码添加元数据,这些元数据可以被框架、工具或运行时环境读取和处理,从而提供强大的自定义功能。


http://www.mrgr.cn/news/55051.html

相关文章:

  • VTK的学习方法-第一类型应用
  • string
  • 计算PSNR, SSIM, VAMF工具
  • 从0开始深度学习(11)——多层感知机
  • 【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数
  • 394.字符串解码
  • Lesson10---list
  • 江恩理论(Gann Theory)
  • SQL Injection | SQL 注入 —— 报错盲注
  • 【AIGC】智能创作的革新与未来展望
  • 基于模型设计的智能平衡移动机器人-基础实验SCI
  • Win11右键默认显示更多选项
  • 从零开始搭建一个高可用的HBase集群
  • C++ -string -常见用法5
  • DS快速排序和归并排序的非递归实现(16)
  • 【Javaee】网络编程-TCP Socket
  • Linux常用命令详细解析(含完整命令演示过程)
  • windows C++ 有效利用异步代理库(二)
  • 上海市货运资格证二寸照片要求及手机拍照方法
  • C++编程语言:抽象机制:运算符重载(Bjarne Stroustrup)
  • PostgreSQL模板数据库template0和template1的异同点
  • 033 商品搜索
  • 音视频入门基础:FLV专题(17)——FFmpeg源码中,提取Video Tag的VIDEODATA的实现
  • Linux:基础IO
  • 软件测试技巧-如何定位前后端bug?
  • 营销新境界:解码品牌增长策略