@value注解_Java系列之注解

v2-84eaac52ee0b5d6310806b81a2705b3c_1440w.jpg?source=172ae18b

Java 注解(Annotation)又称之为 Java 标注、元数据,是 Java 1.5 之后加入的一种特殊语法,通过注解可以标注 Java 中的类、方法、属性、参数、包等,可以通过反射原理对这些元数据进行访问,注解的使用不会影响程序的正常运行,只会对编译器警告等辅助工具产生影响。

注解功能

  • 编译器可以使用注解来检测错误和取消警告;
  • 使用注解可以生成特定代码,如 ButtferKnife 使用注解简化 findViewById等;
  • 某些注解可以在运行时进行检查和操作。

定义注解

注解的定义使用 @interface 作为关键字,实际上表示自动继承了 java.lang.annotation.Annotation 接口,定义格式参考如下:

@元注解

配置参数里面的类型包括基本类型、String、class、枚举以及相关类型的数组,可以使用 default 设置配置参数的默认值,定义一个注解具体如下:

@Target

内置注解

  1. @Override
  2. @Deprecated
  3. @SuppressWarnings

下面是上面三个内置注解的声明:

//表示当前的方法将覆盖超类中的方法,编译时进行格式检查

根据对上面三个注解的声明来看,@SuppressWarnings 中定义了一个数组,这个数组表示在该注解上具体的目标是那些,如可在 SuppressWarnings 上使用的值,常用的具体如下:

  • deprecation:使用了过时的类或方法时的警告
  • unused:有未使用的变量时的警告
  • unchecked:执行了未检查的转换时的警告
  • fallthrough:当 switch 程序块直接通往下一种情况而没有 break 时的警告
  • path:在类路径、源文件路径等中有不存在的路径时的警告
  • serial:当在可序列化的类上缺少serialVersionUID 定义时的警告
  • finally :任何 finally 子句不能正常完成时的警告
  • all:关于以上所有情况的警告

下面看一个案例,具体如下:

public 

上面的代码如果使用 eclipse 等其他 IDE 时会出现两个警告,一是使用了过时的 API,二是变量 date 赋值后没有被使用过,警告截图如下:

v2-b42b0861170640bb915db180d687ec67_b.png

当然, IDE 会提示是否添加 SuppressWarnings 来取消这些警告,前文中可以看到注解 @SuppressWarnings 的声明中需要配置参数,这个参数是一个数组,数组名称是 value,可以省略这个名称, 具体如下:

//不省略
public void test2() {@SuppressWarnings(value= {"deprecation", "unused"})long date = Date.parse("2018-04-22");
}
//省略
public void test2() {@SuppressWarnings({"deprecation", "unused"})long date = Date.parse("2018-04-22");
}

来张截图说明一下使用 @SuppressWarnings 的效果,具体如下:

v2-700d5b031fee83f44ef195f9832ce397_b.png

如果只想取消一种警告可以这样写,具体如下:

//第一种

注意:如果在定义注解的配置参数名称为 value,那么可以在配置注解时可以省略 value,反之,使用其他名称,则必须采用第一种方式,要指定配置参数名称。

当然其他注解和 @SuppressWarnings 也比较类似, @Override、@Deprecated 由它们的声明可知直接使用即可,不需要指定具体目标,在其声明注解时用到了 @Documented、@Retention、@Target 等,这些用来注解其他注解的特殊注解称之为元注解,具体请看下文。

元注解

  1. @Target
  2. @Retention
  3. @Documented
  4. @Inherited

@Target

@Target 用来描述注解的使用范围,它的声明如下:

@Documented

由 @Target 声明可知使用 @Target 注解必须指定具体的 Java 成员,也就是该注解要使用到哪个位置,具体由枚举 ElementType 中定义,具体如下:

public 

@Retention

@Retention 表示在什么级别保存该注解的信息,它的声明如下:

@Documented

由 @Retention 的声明可知,使用 @Retention 时,必须指定保存celue(RetentionPolicy),具体值如下:

public 

@Documented@Inherited 都没有配置参数,是一种标记注解,@Documented 表示将该注解显示到用户文档中,@Inherited 表示该注解只有使用在类上才会有效,而且该注解会被子类继承。

类型注解

在对元注解的说明中可知从 Java8 开始新增了类型注解,如果在注解 @Target 使用这种注解,表明该注解可以在对应的任何地方使用,如在 @Target 中指定 TYPE_PARAMETER 就可在自定义类型的声明处使用该注解,如在 @Target 中指定 TYPE_USE 就可在任何类型前添加该类之间,主要是方便 Java 开发者使用类型注解和相关插件(Checker Framework)来检查来在编译期检查运行时的异常。

下面分别定义指定 TYPE_PARAMETER 和 TYPE_USE 的注解,具体如下:

//1. TYPE_PARAMETER

然后,在下面的案例中使用这两个注解,具体如下:

/**

其实注解的语法比较简单,仅仅定义注解对实际开发是没有帮助的,觉得注解只有在运行时通过反射获取注解信息才是最重要的,注解与反射相关的内容会在以后的推文中学习,到此对注解的认识就结束了。

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

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

相关文章

磁共振线圈分类_收藏:磁共振检查序列及临床应用总结

磁共振检查要用到序列,什么是磁共振序列(Sequence)呢? 序列,简单的讲是指具有一定带宽、一定幅度的射频脉冲与梯度脉冲的有机组合。而射频脉冲与梯度脉冲不同的组合方式构成不同的序列,不同的序列获得的图像有各自的特点。磁共振序…

css unchecked,详细介绍CSS中的伪选择器

说到伪选择器,真的让我体会到了CSS的无比强大,强大到自己貌似都不认识CSS了,有点C# 6.0中一些语法糖带给我们的震撼。。。首先我们可以在VS里面提前预览一下。可以看到,上面的伪类有很多很多,多的让我眼都快瞎了。。。…

matlab安装程序无法启动jvm_天呀!JVM居然还有2两种运行模式

概述JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机&…

boot idea无法识别spring_idea搭建springboot项目

Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程。它主要推崇的是消灭配置’,实现零配置。那么,如何在idea中创建一个springboot项目呢?一.在你建立的工程下创建 Module 选择Spr…

台州银行登录显示服务器异常,台州银行网上银行异常问题处理

1、登陆密码没办法输,是个叉。解答:1、加载项加载(弹出窗口阻止了);2、添加安全受信任站点;3、密码控件安装。2、动态令牌版交易时手机验证码收不到解答:1、秒数不会倒数:没点好或是IE兼容性的问题&#xf…

a*算法的时间复杂度_算法的时间和空间复杂度,就是这么简单

算法(Algorithm)算法是程序用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还…

筒灯智能驱动芯片作用_魅族发布Lipro智能吸顶灯与地脚灯 解决生活照明两大痛点...

1月5日,魅族高端智能家居品牌Lipro正式发布了首期六款健康照明产品以及两款配件,分别是智能吸顶灯、筒灯、灯泡、灯带、地脚灯、橱柜灯、无极调光面板和驱动电源。该系列产品全系搭载如然之光LED光源,在实用性、外观设计以及用料材质上&#…

python爬取豆瓣电影并分析_Python爬取豆瓣电影的短评数据并进行词云分析处理

前言 对于爬虫很不陌生,而爬虫最为经典的案例就是爬取豆瓣上面的电影数据了,今天小编就介绍一下如果爬取豆瓣上面电影影评,以《我不是药神》为例。 基本环境配置 版本:Python3.6 相关模块: (1)r…

云服务器开启ftp_用云服务器怎么挂机器人

用服务器​怎么挂机器人?以往,大家大多使用个人电脑来做作为挂机使用,这不仅仅会加速电脑的老化,也需要支付高昂的电费、宽带费。那么怎么解决?使用云服务器!随着技术不断进步,现在各类应用逐步…

python带通滤波_python中的fft带通滤波器

值得注意的是,bp单位的大小不一定是以Hz为单位,而是取决于信号的采样频率,你应该使用 scipy.fftpack.fftfreq进行转换.此外,如果您的信号是真实的,您应该使用 scipy.fftpack.rfft.这是一个最小的工作示例,过滤掉低于指定数量的所有频率: import numpy as np from sc…

三个变量存在一个协整方程_三变量误差修正模型:两个解释变量,用JJ协整检验后得到以下结果,如何看这个结果?怎样做误差修正模型?...

三变量误差修正模型:两个解释变量,用JJ协整检验后得到以下结果,如何看这个结果?怎样做误差修正模型?0vldxhg2013.04.12浏览2007次分享举报Date: 01/13/12 Time: 12:06Sample (adjusted): 1989 2010Included observatio…

jquery上传图片_文件上传三种方式

来源&#xff1a;python宝典 链接&#xff1a;https://mp.weixin.qq.com/s/YUplCQDfAucA_rS8E1T6WA需求上传图片在页面显示Form表单上传<html lang"en"><head><meta charset"UTF-8"><title>Titletitle>head><body>…

python 参数收集_Python基础教程第六章 6.4.4 收集参数

def print_params(*params):print paramsprint_params(Testing)print_params(1,2,3)输出结果(Testing,)(1, 2, 3)参数前的星号将所有值放置在同一个元组中&#xff0c;并且能与普通参数联合使用def print_params_2(title,*params):print titleprint paramsprint_params_2(Param…

vue seo关键词设置_SEO关键词优化排名的几个技巧

关键词是优化网站必须要思考分析的&#xff0c;SEO网站优化过程中&#xff0c;网站的文章内容及标题优化&#xff0c;那么必须要考虑到网站的主关键词与长尾关键词了。那么&#xff0c;SEO关键词优化排名的技巧有哪些&#xff1f;下面眼前一亮就跟大家分享下SEO关键词快速排名技…

python有没有帮助_没想到,python给我的帮助竟然这么大

2012年&#xff0c;SEO行业分为两派——技术派和理论派&#xff0c;技术派认为应该深入理解搜索引擎工作原理&#xff0c;学会web开发&#xff0c;这样做SEO才能走得远;理论派则认为只要掌握理论&#xff0c;会不会编程无所谓。当时SEO人员纷纷站队&#xff0c;在各大SEO论坛上…

loadrunner录制事件为0_Oracle数据库性能监控|LoadRunner 中配置监控Oracle

Oracle 是目前世界上大型应用系统广泛使用的数据库&#xff0c;Oracle 数据库产品为财富排行榜上的前1000 家公司所采用&#xff0c;许多大型网站也选用了Oracle 系统。Oracle 内部结构比较复杂&#xff0c;如图8.1 所示&#xff0c;出现性能问题的可能性是比较大的。因此在性能…

闪退的解决方法_王者荣耀2.0不闪退需要什么手机?王者荣耀2.0闪退解决方法

[海峡网]国民级手游《王者荣耀2.0》刚刚上线不久&#xff0c;很多玩家就发现游戏的时候出现了闪退、卡顿严重等严重影响游戏体验的情况&#xff0c;虽然官方做出了补丁更新的动作&#xff0c;但是依旧有很多小伙伴注定与《王者荣耀2.0》无缘&#xff0c;那么&#xff0c;为了玩…

string函数_C++[06] string成员函数之删除函数erase

介绍一下删除函数erase&#xff0c;老方法&#xff0c;新建cpp文件&#xff0c;并找到string的erase成员函数&#xff0c;可以看到&#xff0c;erase有3个重载函数右键转到定义&#xff0c;可以查看erase的源码_Myt& erase(size_type _P0 0, size_type _M npos){ if …

python安装缺少api怎么办_请问缺少win32api模块该如何解决?

32位WINDOWS7&#xff0c;PYTHON3.6.2环境下&#xff0c;一个简单的爬虫程序&#xff0c;加载了一些包&#xff1a; from scrapy.selector import Selector from scrapy import Spider from scrapy.spiders import CrawlSpider,Rule from scrapy.linkextractors.sgml import Sg…

pc端jquery左右按钮控制带缩略图的图片切换代码_Web开发实用的图片预览插件,简单零依赖——PhotoSwipe...

介绍PhotoSwipe是一个JavaScript库&#xff0c;没有依赖项。要说唯一的依赖项那就是Vanilla.js(原生js),因此你可以在你的任何Web项目中使用&#xff0c;包括主流的Vue、React、Angular以及传统jQuery的项目。PhotoSwipe可以被用到各种大中小型项目当中&#xff0c;并且PC和移动…