Java 常用注解的使用

news2024/11/29 12:36:44

在Java中,注解(Annotation)是一种元数据,它提供了一种机制,可以将元数据与代码一起存储,并使其可用于编译器、解释器或其他工具的处理。注解可以在Java源代码中添加元数据,以提供更多的信息,这些信息可以被编译器、解释器和其他工具用于代码分析、生成文档、代码优化等。

Java中的注解有很多种,每种注解都有不同的作用和用途。在本文中,我们将介绍Java中常见的注解,并讨论它们的作用和用途。

在这里插入图片描述

@Override注解

@override注解用于标识一个方法是覆盖了父类中的方法。如果一个方法被标记为@override,但是它并没有覆盖任何父类方法,编译器将会抛出错误。这个注解可以帮助开发者避免因错误的覆盖方法而导致的代码难以维护和调试。

@Override
public void foo() {
    // Override implementation
}

@Deprecated注解

@Deprecated注解用于标识一个方法或类已经过时,不建议使用。如果一个方法或类被标记为@Deprecated,编译器将会在使用该方法或类时发出警告。这个注解可以帮助开发者避免使用已过时的API,以减少代码的风险和维护成本。

@Deprecated
public void foo() {
    // Deprecated implementation
}

@SuppressWarnings注解

@SuppressWarnings注解用于抑制编译器或其他工具的警告信息。如果一个方法或类被标记为@SuppressWarnings,编译器将会忽略与该注解相关的警告信息。这个注解可以帮助开发者通过禁止警告信息来减少代码的冗余和噪声。

@SuppressWarnings("unchecked")
public List<String> foo() {
    return new ArrayList();
}

@FunctionalInterface注解

@FunctionalInterface注解用于标识一个接口是函数式接口。如果一个接口被标记为@FunctionalInterface,编译器将会检查该接口是否符合函数式接口的规范,即该接口只能有一个抽象方法。这个注解可以帮助开发者定义和使用函数式接口,以实现函数式编程的优势。

@FunctionalInterface
public interface Foo {
    void bar();
}

@SafeVarargs注解

@SafeVarargs注解用于标识一个方法是类型安全的可变参数方法。如果一个方法被标记为@SafeVarargs,编译器将会禁止使用可能导致类型安全问题的可变参数方法。这个注解可以帮助开发者避免类型安全问题,以提高代码的可维护性和可靠性。

@SafeVarargs
public final <T> List<T> foo(T... args) {
    return Arrays.asList(args);
}

@Nullable和@NonNull注解

@Nullable和@NonNull注解用于标识一个方法或参数是否可以为null。如果一个方法或参数被标记为@Nullable,表示该方法或参数可以为null;如果一个方法或参数被标记为@NonNull,表示该方法或参数不能为null。这个注解可以帮助开发者避免空指针异常,以提高代码的可靠性和可维护性。

public void foo(@Nullable String str) {
    // Do something with str
}

public void bar(@NonNull String str) {
    // Do something with str
}

自定义注解

除了Java中已经定义的注解,开发者还可以自定义注解。自定义注解可以帮助开发者在代码中添加更多的元数据,并提供更多的信息。自定义注解可以使用@interface关键字定义,并可以指定元注解,用于指定注解的作用和使用方式。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value();
}

这个示例中,我们定义了一个自定义注解@MyAnnotation,用于标识一个方法。@Retention注解指定该注解在运行时可用,@Target注解指定该注解可以用于方法上。注解中定义了一个value参数,用于传递注解的值。

总结

在Java中,注解是一种元数据,它提供了一种机制,可以将元数据与代码一起存储,并使其可用于编译器、解释器或其他工具的处理。Java中常见的注解有很多种,每种注解都有不同的作用和用途。使用注解可以帮助开发者增加代码的可读性、可维护性和可靠性,以提高代码的质量和效率。除了Java中已经定义的注解,开发者还可以自定义注解,以满足特定的需求和场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】Linux基本指令(3)

一.时间的相关指令 date显示 单纯的输入 date 会以这种形式输出&#xff1a; 但其实这种形式我们看着是不太习惯的&#xff0c;我们可以指定形式输出&#xff1a; 格式为&#xff1a;date 选项 %H : 小时(00..23) %M : 分钟(00..59) %S : 秒(00..61) %X : 相当于 %H:%M:%S %d …

Qt扫盲-QPieSlice理论总结

QPieSlice理论总结 一、概述二、标签三、属性设置四、信号说明 一、概述 QPieSlice 类表示饼图中的单个QPieSlice。饼图QPieSlice有一个值和一个标签。将QPieSlice添加到饼图时&#xff0c;QPieSeries对象将自动计算QPieSlice的百分比&#xff0c;并与序列中所有QPieSlice的总…

Java SE(十一)之包装类(各种类型之间的转换)

文章目录 Object类 &Number类1.Object2.Number类 包装类&#xff0c;装箱&#xff0c;拆箱1.手动装箱/拆箱2.自动装箱/ 拆箱 应用——常见包装类1.Integer类2.Character类3.实战——各种类型之间的转换&#xff08;1&#xff09;int和Integer相互转换&#xff08;2&#xf…

20230514-SmartChat测试效果图

E:\20230514-SmartChat测试效果图您好&#xff0c;我是SmartChat&#xff0c;新生代智能机器人&#xff0c;通过运用自然语言处理、机器学习和人工智能等高精尖技术&#xff0c;可以与您进行自然、流畅、有趣的对话&#xff0c;帮助您获取所需的信息和服务。无论您想要写商业计…

如何提高跨职能团队的绩效和成果

在50年代&#xff0c;当计算机仍被视为复杂的计算器时&#xff0c;西北互助人寿保险公司就计算机对未来业务的影响进行了研究。有趣的是&#xff0c;该公司的首席执行官为这项研究设立了一个不同寻常的团队——由来自多个部门的员工组成&#xff0c;每个人都看到了计算机在保险…

redis批处理任务,多线程 or pipeline

前言 工作中使用redis的时候遇到一个问题&#xff0c;如果我们要对存储在redis中的一批数据进行操作&#xff0c;为了加快处理的速度&#xff0c;我们一般有两种方式&#xff1a; 建立多个线程&#xff0c;使用多个连接发送请求使用redis提供的pipeline 引发了一个小思考&…

股票量价关系基础知识9----图解各阶段量价关系:价平量平

价平量平是指股价涨跌幅度不大&#xff0c;成交量持平&#xff0c;反映多空双方受不明朗因素困扰&#xff0c;均对后市走势持观望态度&#xff0c;投资者在此阶段不宜盲目入市&#xff0c;但具体到某一阶段又略有差异。 一、上涨初期的价平量平 &#xff08;一&#xff09;形态…

深度学习之图像分类(二):ZFNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

SpringBoot 2.0 + Nacos + Sentinel 流控规则集中存储

前言 Sentinel 原生版本的规则管理通过API 将规则推送至客户端并直接更新到内存中&#xff0c;并不能直接用于生产环境。不过官方也提供了一种 Push模式&#xff0c;扩展读数据源ReadableDataSource&#xff0c;规则中心统一推送&#xff0c;客户端通过注册监听器的方式时刻监…

四轴飞控DIY Mark4 - 优化后续二

四轴飞控DIY Mark4 - 优化后续二 1. 源由2. 优化方案3. 实现细节3.1 锡箔屏蔽3.2 热缩管固定3.3 电池地接地3.4 更换飞控 4. 整体效果4.1 配置4.2 Roll&Pitch波形4.3 电机波形 5. 结论6. 附录&#xff1a;FPV Quad GPS cable sheilding 1. 源由 Betaflight BN880 GPS 简单测…

Qt扫盲-QPieSeries理论总结

QPieSeries理论总结 一、概述二、简单的使用1. 创建 QPieSeries 并赋值2. 自定义显示 QPieSlice3. 初始化绘图设备&并关联上图4. 把绘图设备框架放置在 Gui 控件上5. 完整代码 三、镂空饼状图1. 初始化 QPieSeries 和 QPieSlice2. 初始化绘图设备&并关联上图3. 把绘图设…

深度学习之图像分类(四):AlexNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…

Python地理数据处理 22:基于arcpy批量操作(四)

批量裁剪 1. 批量裁剪进阶2. 统计运算3. 栅格批量缩小n倍4. 建立属性表&#xff08;简化、普适&#xff09;5. 计算土地利用未变化区域&#xff08;LUCC&#xff09; 1. 批量裁剪进阶 代码描述&#xff1a;遍历a文件夹下的所有tif影像&#xff0c;并使用每个a文件夹中的tif影像…

MobileOne(CVPR 2023)原理与代码解析

paper&#xff1a;MobileOne: An Improved One millisecond Mobile Backbone official implementation&#xff1a;https://github.com/apple/ml-mobileone third-party implementation&#xff1a;mmpretrain/mobileone.py at main open-mmlab/mmpretrain GitHub 前言 …

在Ubuntu Kylin系统中安装并使用minicom

1、minicom的安装 首先在命令窗口中输入:minicom -s 如果显示的是:程序“minicom”尚未安装,您可以使用一下命令安装:sudo apt install minicom 这时需要minicom安装包 sudo apt-get install minicom 2、minicom的配置 sudo minicom -s # 打开minicom配置界面 3、配置…

(第44册)Java程序设计应用开发

书名&#xff1a;Java程序设计应用开发 书号&#xff1a;978-7-113-29847-0 作者&#xff1a;张西广,夏敏捷,罗菁 编著 出版日期&#xff1a;2023年1月 目前学习和关注 Java 语言的人越来越多&#xff0c;Java 语言已是目前世界上最为流行的程序开发语言之一。由于具有功能…

用于半监督体积医学图像分割的动量对比体素表示学习

文章目录 Momentum Contrastive Voxel-Wise Representation Learning for Semi-supervised Volumetric Medical Image Segmentation摘要本文方法Voxel-Wise Contrastive ObjectiveDimensional Contrastive ObjectiveConsistency Loss总损失 实验结果 Momentum Contrastive Voxe…

可以白嫖的语音识别开源项目whisper的搭建详细过程 | 如何在Linux中搭建OpenAI开源的语音识别项目Whisper

原文来自我个人的博客。 1、前提条件 服务器为GPU服务器。点击这里跳转到我使用的GPU服务器。我搭建 whisper 选用的是 NVIDIA A 100显卡&#xff0c;4GB显存。 Python版本要在3.8~3.11之间。 输入下面命令查看使用的Python版本。 python3 -V2、安装Anaconda 为啥要安装A…

ORACLE数据库长连接客户端持久的CLOSE_WAIT

前言 根据以往的项目构造&#xff0c;业务层数据库基本使用长连接形式进行批量操作。大部分周期有执行的链接基本正常。再长期的内测中也没有发生CLOSE_WAIT的现象。 上线后采用的数据库使用了新的版本&#xff0c;发现产生CLOSE_WAIY。根据开发经验和网上搜索&#xff0c;发…

『手撕 Mybatis 源码』01 - 基本原理与搭建

MyBatis的架构设计 Api接口层&#xff1a;提供API 增加、删除、修改、查询等接口&#xff0c;通过API接口对数据库进行操作 例如下面这些操作 sqlSession.selectOne(statementId, param); mapperProxy.findByCondition(param);数据处理层&#xff1a;解析sql根据调用请求完成…