首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >简单、快速教你自定义注解

简单、快速教你自定义注解

作者头像
ha_lydms
发布于 2023-08-09 13:23:38
发布于 2023-08-09 13:23:38
19500
代码可运行
举报
文章被收录于专栏:学习内容学习内容
运行总次数:0
代码可运行

一、注解

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、 接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素 进行说明,注释。

  • @Target
  • @Retention

自定义注解作用: 可以指定含有注解的方法执行,可以指定参数。

1、元注解之@Target

作用:指明此注解用在哪个位置,如果不写默认是任何地方都可以使用。 可选的参数值在枚举类ElemenetType中包括:

  • TYPE: 用在类,接口上
  • FIELD:用在成员变量上
  • METHOD: 用在方法上
  • PARAMETER:用在参数上
  • CONSTRUCTOR:用在构造方法上
  • LOCAL_VARIABLE:用在局部变量上
2、元注解之@Retention

作用:定义该注解的生命周期(有效范围)。 可选的参数值在枚举类型RetentionPolicy中包括

  • SOURCE:注解只存在于Java源代码中,编译生成的字节码文件中就不存在了。
  • CLASS:注解存在于Java源代码、编译以后的字节码文件中,运行的时候内存中没有,默认值。
  • RUNTIME:注解存在于Java源代码中、编译以后的字节码文件中、运行时内存中,程序可以通过反射获取注解。

二、注解的属性

1、属性的作用

可以让用户在使用注解时传递参数,让注解的功能更加强大。

2、属性的格式

格式1:数据类型 属性名(); 格式2:数据类型 属性名() default 默认值;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
元注解
public @interface 注解名称{
	属性列表;
}
3、定义案例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public @interface Student { 
  	// 姓名
	String name(); 
    // 年龄 
	int age() default 18; 
    // 性别
	String gender() default "男"; 
}// 该注解就有了三个属性:name,age,gender
4、属性适用的数据类型

八种基本数据类型(int,flfloat,boolean,byte,double,char,long,short)

String类型,Class类型,枚举类型,注解类型

以上所有类型的一维数组

三、完整代码

注解MyAnnotation

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 MyAnnotation {
    // 多位作者
    String[] authors();
    // 书名
    String value()default "暮光之城";
    // 价格
    double price() default 100;
}

具体使用类TestAnnotation

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestAnnotation {
	//有注解的被调用执行,并获取注解中的值
    @MyAnnotation(authors = "张三")
    public void test01() {
        System.out.println("Test MyAnnotation");
    }
	//没有注解的不执行
    public void test02() {
        System.out.println("I am Test02");
    }
}

测试类Test

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.lang.reflect.Method;
public class Test {
    public static void main(String[] args) throws Exception {
	//执行方法
        TestAnnotation obj = new TestAnnotation();
        run(obj);
    }
  
	//执行含有注解的方法
    public static void run(Object obj) throws Exception {
      //利用反射获取成员方法
        Method[] methods = obj.getClass().getMethods();
        for (Method m : methods) {
          //从方法中获取含有指定注解
            MyAnnotation my = m.getDeclaredAnnotation(MyAnnotation.class);
            if (my != null) {
              //获取注解的参数
                System.out.println("书名为:" + my.value());
                System.out.println("作者为:" + (my.authors())[0]);
                System.out.println("价格为:" + my.price());
              //执行含有注解的方法
                m.invoke(obj);
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
module 'torch.library' has no attribute 'register_fake'
你需要将 torch 升级到与 torchvision 兼容的版本(例如 2.3.0 或更高)。
用户10171634
2025/07/19
1010
yolov10训练报错GET was unable to find an engine to execute this computation
一般安装高版本torch会导致这个问题,如果安装torch低版本都会解决问题,报错版本torch==2.3.0,如果你安装1.x版本不会这有问题。出现这个问题原因是torch2.3.0依赖cudnn会自动安装python环境,但是又和系统cudnn冲突。因此卸载环境自带的cudnn即可解决问题。
云未归来
2025/07/17
440
yolov10训练报错GET was unable to find an engine to execute this computation
Python自动析构时出现Exception AttributeError: 'NoneType' object has no attribute的问题
昨晚在整理自己的python脚本的时候,想把其中一个脚本中的print函数全都改成logging包中的相关函数。改完后一运行却出现了Exception AttributeError: 'NoneType' object has no attribute的错误,网上搜了一下没找到相关答案。上午再想了想,原因应该是跟python对象的析构有关,具体分析过程如下:
typecodes
2024/03/29
6300
Python自动析构时出现Exception AttributeError: 'NoneType' object has no attribute的问题
pyinstaller打包报错AttributeError: 'NoneType' object has no attribute 'get_filename'
ModuleNotFoundError: No module named 'text_unidecode'
大大刺猬
2022/03/30
2.8K2
json无法解析单引号解决方案
1、json文件的保存与加载 一般来说,我创建字典、保存为json文件、加载json文件的常用做法如下面代码所示。
kirin
2020/05/09
4.2K0
Tensorflow protobuf版本报错问题解决(AttributeError: 'module' object has no attribute 'Default')
本文介绍了在Tensorflow中使用protobuf时遇到的报错问题,通过升级protobuf库版本以及使用默认的pool来解决这个问题。同时,文章也介绍了一些可能的原因和解决方法。
sparkexpert
2018/01/09
6.2K0
python3使用kivy生成安卓程序
虽然现在苹果占据了很大一部分的市场,但是从销量数据来看,安卓还是占据了人口的高地。这里我们介绍一个用python的kivy+buildozer来进行安卓APP开发的简单教程,从整个过程中来看,环境部署这一块所需的工作量是非常大的,可能这就是从0到1的困难?文末我们会总结出,哪一种方案是最容易的,希望能够对大家有所帮助。
DechinPhy
2021/05/21
10.5K0
ROS2(Win10)更新记录21-07-27
win10下ROS2,更新并不快,要点体会: 功能包不全 节点启动速度明显比Linux慢 闪退现象多 但能用……真的能用…… 详细过程如下,仅供参考 ********************************************************************** ** Visual Studio 2019 Developer Command Prompt v16.9.3 ** Copyright (c) 2021 Microsoft Corporation ***********
zhangrelay
2021/12/02
7570
DeepSeek 大模型基本认知(V3、R1、Janus、VL2 简单介绍以及本地部署)
“以开源精神和长期主义追求普惠 AGI” 是 DeepSeek 一直以来的坚定信念
山河已无恙
2025/02/25
1.4K0
DeepSeek 大模型基本认知(V3、R1、Janus、VL2 简单介绍以及本地部署)
Python知识书阅读笔记
阅读《Python从入门到精通》时产生的笔记,部分以及掌握的知识点或者是不常用知识点会被省略
Moemu
2023/05/04
8680
安装allure后执行命令后报错 INTERNALERROR> AttributeError: module 'pytest' has no attribute 'allure'
安装allure后执行命令后报错module ‘pytest’ has no attribute ‘allure’
小黑同学
2020/08/17
1.3K0
移动端App安全扫描平台-MobSF
MobSF(Mobile-Security-Framework)是一种开源自动化的移动应用程序(Android / iOS / Windows)安全测试框架,能够执行静态,动态和恶意软件分析。
清风穆云
2021/08/09
8.2K1
【Python】已解决报错: TypeError: the JSON object must be str, bytes or bytearray, not ‘dict‘的解决办法
在使用Python进行开发时,JSON是一种常见的数据交换格式。 然而,在处理JSON数据时,开发者可能会遇到TypeError: the JSON object must be str, bytes or bytearray, not 'dict’的错误。 这个错误通常发生在尝试将一个字典(dict)直接转换为JSON格式时。
程序员洲洲
2024/06/15
6360
python3使用kivy生成安卓程序
虽然现在苹果占据了很大一部分的市场,但是从销量数据来看,安卓还是占据了人口的高地。这里我们介绍一个用python的kivy+buildozer来进行安卓APP开发的简单教程,从整个过程中来看,环境部署这一块所需的工作量是非常大的,可能这就是从0到1的困难?文末我们会总结出,哪一种方案是最容易的,希望能够对大家有所帮助。
不知名站长
2021/04/07
11.6K0
python3使用kivy生成安卓程序
使用 Python 开发 CLI 工具并打包发布到 PyPI
If you wish to change this, you may define the $POETRY_HOME environment variable:
yiyun
2023/02/06
3.5K0
启动 celery worker 报错:AttributeError: 'str' object has no attribute 'items'
错误日志 (joyoo) yinzhuoqundeMacBook-Pro:joyoo yinzhuoqun$ python manage.py celery worker --loglevel=info raven.contrib.django.client.DjangoClient: 2019-12-15 02:07:00,997 /Users/yinzhuoqun/.pyenv/joyoo/lib/python3.6/site-packages/raven/base.py [line:213] INF
卓越笔记
2023/02/18
5820
TensorFlow的安装
在本篇文章中,我们将会介绍TensorFlow的安装,TensorFlow是Google公司在2015年11月9日开源的一个深度学习框架。
夜雨飘零
2020/05/06
1.9K0
零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
本文是一篇超详细“Python安装教程”,覆盖Windows、macOS、Linux三大操作系统的Python安装方法与环境配置,包括Python下载、环境变量设置、Python版本管理、Python虚拟环境(venv)搭建、pip包管理等关键步骤。此外,文章还重点讲解了两款主流IDE——VSCode与PyCharm的Python开发环境搭建与配置,详细演示Python解释器选择、Python扩展安装、调试与运行设置,让初学者轻松实现VSCode Python开发、PyCharm Python项目创建。无论是“Windows安装Python教程”、“macOS安装Python指南”还是“Linux安装Python实战”,都提供了图文并茂的操作步骤;同时结合“Python虚拟环境搭建教程”、“pip使用教程”、“包管理实战”及“常见问题排查”要点,让你从零基础快速掌握Python环境配置与常用操作。阅读这篇“从下载到环境配置一步到位”的Python入门指南,立即开启Python学习之旅!
猫头虎
2025/06/02
2.9K0
零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
爆肝六万字整理的python基础,快速入门python的首选
学习python开发,首先要学会安装Python环境,我一般使用Anaconda+Pycharm作为开发环境。Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果觉得安装包太大可以使用Miniconda。
全栈程序员站长
2022/09/07
1.9K0
爆肝六万字整理的python基础,快速入门python的首选
AttributeError: ‘Rectangle‘ object has no property ‘normed‘ 解决方法 matplotlib绘图
原因:matplotlib版本问题,最新版本已经没有这个属性了。normed参数替换成 density 即可。
叶庭云
2021/12/07
1.5K0
AttributeError: ‘Rectangle‘ object has no property ‘normed‘ 解决方法 matplotlib绘图
推荐阅读
相关推荐
module 'torch.library' has no attribute 'register_fake'
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档