注解反射之使用Class对象获取注解

news/2025/2/7 23:31:09/文章来源:https://www.cnblogs.com/loubin/p/18703481

代码如下

package com.loubin;import java.lang.annotation.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {User user = new User("张三", 18);Class c = user.getClass();UserTable userTable = (UserTable) c.getAnnotation(UserTable.class);String tableName = userTable.tableName();System.out.println(tableName);Field fieldName = c.getDeclaredField("name");UserColumn userColumn = fieldName.getAnnotation(UserColumn.class);System.out.println(userColumn.columnName());System.out.println(userColumn.columnType());System.out.println(userColumn.columnLength());//        Class c = User.class;
//        String name = c.getName();
//        System.out.println(name);
//        System.out.println("获取所有属性-------------------------------");
//        Field[] fields = c.getDeclaredFields();
//        for (Field field : fields) {
//            System.out.println(field.getName());
//        }
//        System.out.println("获取指定属性-----------------------------------");
//        Field field = c.getDeclaredField("name");
//        System.out.println(field.getName());
//        System.out.println("获取所有方法----------------------------------");
//        Method[] methods = c.getDeclaredMethods();
//        for (Method method : methods) {
//            System.out.println(method.getName());
//        }
//        System.out.println("获取指定方法----------------------------------");
//        Method method = c.getDeclaredMethod("getName");
//        System.out.println(method.getName());
//        System.out.println("获取无参构造器------------------------------------");
//        Constructor constructor = c.getDeclaredConstructor();
//        System.out.println(constructor.getName());
//        System.out.println("获取有参构造器-----------------------------------");
//        Constructor constructor1 = c.getDeclaredConstructor(String.class, int.class);
    }
}@UserTable(tableName = "db_user")
class User{@UserColumn(columnName = "db_name", columnType = "string", columnLength = 20)String  name;@UserColumn(columnName = "db_age", columnType = "int", columnLength = 20)int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}public void shout(String name){System.out.println("是谁叫了一下" + name);}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}@Target(value = ElementType.TYPE)
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface UserTable{String tableName();
}@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
@interface UserColumn{String columnName();String columnType();int columnLength();
}

 

测试结果如下

 

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

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

相关文章

ACM寒假集训第三次专题任务

ACM寒假集训第三次专题任务 一、Priority Queue 题目:解题思路: 对优先队列的直接运用,直接翻译题目即可。 AC代码: #include<iostream> #include<string> #include<queue> using namespace std; int main() {int k;string operation;priority_queue<…

一款基于 WPF 开源、功能全面的串口调试工具

前言 今天大姚给大家分享一款基于 WPF 开源(MIT License)、免费、功能全面的串口调试工具:BYSerial。 项目介绍 BYSerial是一款基于 WPF 开源(MIT License)、免费、功能全面的串口调试工具,支持中英文双语切换,具有通用串口调试工具的一般功能,如串口通讯调试、TCP通讯…

NLog日志(二)

NLog //日志输出builder.Logging.ClearProviders();builder.Logging.AddNLog("nlog.config");配置后默认自动全部输出需求:自动记录的输出到控制台,手动记录的输出到日志文件1.配置两个日志记录器 一个控制台,一个日志文件<rules><!-- 默认日志记录器(…

探索数据编码:Delta Encoding

写在前面 在解决Doris访问AWS上存储的Parquet文件时,曾碰到过Doris不支持Delta Encoding导致数据读取失败。于是打算整理下跟Delta Encoding相关的知识,为解决连续的整型存储、Timestamp、Date类型存储时的压缩效率问题提供参考。 数据编码指的是从一种数据格式转换成另一种数…

0207深度学习:构建个性化 ImageNet 数据集的 LeNet 和 MobileNet 实践

2月7日,晚上,19:30~21:00(主讲老师:郑祥)实验内容: 【深度学习】训练常见的卷积神经网络模型 如LeNet和MobileNet,能制作个性化的ImageNet数据集,涉及到MMEdu、EasyTrain等工具。【2/6 19:00】二阶段直播接入和一阶段直播方式一样。接入方式请参考一阶段内容:【2/5…

注解反射之通过Class对象来操作对象的属性和方法

代码如下package com.loubin;import java.lang.annotation.*; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class Main {public static void main(S…

百度网盘的闲时下载卡入口

https://baijiahao.baidu.com/s?id=1820111080013395787&wfr=spider&for=pc 百度网盘的闲时下载卡入口首先,需要明确是,闲时下载卡的使用时间是01:00-09:00。闲时下载卡的使用时间是01:00-09:00其次,是电脑端的入口。1.在下载界面点击“立即提速”点击箭头指示…

2025年夸克网盘1TB免费空间领取教程,轻松扩容你的网盘

今天为大家带来的是2025年夸克网盘1TB免费空间领取教程,轻松扩容你的网盘。大家好呀!这里是专注为大家挖掘各种超值福利的小助手!你是不是也有过这样的烦恼——网盘存储空间不够用,电影、照片、文件放得满满的,完全没有余地?今天我要给大家带来一个超实用的福利,夸克网盘…

Duplicate Cleaner : 这款神器一键干掉重复文件

在如今这个数字时代,我们的电脑里存储着海量的文件。随着时间的推移,重复文件也越来越多,不仅占用宝贵的磁盘空间,还会让文件管理变得一团糟。 今天,就给大家介绍一款能轻松解决这一难题的神器 ——Duplicate Cleaner。Duplicate Cleaner 有普通版和功能更强大的 Pro 版。…

Doggo:一款友好的命令行DNS查询工具

一、基本概述 Doggo是由Karan Sharma使用Go语言开发的现代命令行DNS客户端工具,旨在以简洁、直观的方式输出DNS查询结果。它类似于传统的dig命令,但提供了更为现代化和易读的输出格式。 https://github.com/mr-karan/doggo二、主要特点 1、支持多种协议: Doggo不仅支持传统的…

uniapp 移动端(ios)uview2.0 u-input 插槽问题

这个插槽太奇怪了,非得加上对于的属性才能使用。<u-input class="u-input" prefixIcon="search" suffix-icon="search" placeholder="请输入验证码" type="text" border="surround"color="#fffffff0&quo…

DeepSeek-R1 技术全景解析:从原理到实践的“炼金术配方” ——附多阶段训练流程图与核心误区澄清

字数:约3200字|预计阅读时间:8分钟(调试着R1的API接口,看着控制台瀑布般流淌的思维链日志)此刻我仿佛看到AlphaGo的棋谱在代码世界重生——这是属于推理模型的AlphaZero时刻。 DeepSeek 发布的 V3、R1-Zero、R1 三大模型,代表了一条从通用基座到专用推理的完整技术路径。…