java 反射和注解1-反射详解

反射和注解本就是一家人,注解离不开反射,这里先将反射的写法,本文涉到的注解暂时可以不不用理解

1,创建一个类

public class ReflexUser {public String name;private String namePrivate;protected String nameProtected;String nameDefault;public void setName(String name) {this.name = name;Log.e("ReflexUser", "setName: " + name);}protected String getNameProtected() {return nameProtected;}String getNameDefault() {return nameDefault;}private String getNamePrivate() {return namePrivate;}public String getName() {Log.e("ReflexUser", "getName: " + name);return name;}}

2,执行反射相关操作

   //反射创建对象//反射获取class对象,相当于获取到加载到内存的ReflexUser.classClass<?> classR = Class.forName("com.kx.jetpack.reflex.own.ReflexUser");//反射创建class实例 ,这里相当于new ReflexUser(),如果ReflexUser这个类在其它库中,无法new 可以通过这个方法创建对象Object o = classR.newInstance();//反射获取对象方法并且执行//根据名字获取class中的方法,这里相当于获取到ReflexUser中getName()这个方法Method getName = classR.getMethod("getName", null);//根据名字获取class中的方法,这里相当于获取到ReflexUser中setName()这个方法//getMethod(String name, Class<?>... parameterTypes)有两个参数,//String name:class中的方法名字//Class<?>... parameterTypes:可变参数,这里相当于方法中设置的参数的类型的class,如果没有就为空//这里的getName没有传入的null,setName有一个String类型,所以传入的为String.class//getMethod:只能获取到public方法的方法//getDeclaredField:获取所有方法Method setName = classR.getMethod("setName", String.class);//执行类的方法,相当余ReflexUser.setName方法setName.invoke(o, "Reflex Method");//执行类的方法,相当余ReflexUser.getName方法//Object invoke(Object obj, Object... args)//Object obj:传入通过反射创建的对象//Object... args:可变参数,传入对应方法中的值getName.invoke(o, null);//反射获取字段//并对字段进行操作,这里获取到ReflexUser中name字段//getField(String name)通过名字获取字段,只能获取到public字段//getDeclaredField(String name):通过名字获取字段,所有的//这里相当于获取到ReflexUser.name这个字段Field field = classR.getField("name");//对字段进行赋值//set(Object obj, Object value):Object obj:传入反射创建的对象,Object value:需要修改的值field.set(o, "Reflex field");//执行获取到的方法反射打印值是否修改成功getName.invoke(o, null);

打印结果如下:

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

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

相关文章

Arduino库之 LedControl 库说明文档

LedControl 库最初是为基于 8 位 AVR 处理器的 Arduino 板编写的。用于通过MAX7219芯片控制LED矩阵和7段数码管。但由于该代码不使用处理器的任何复杂的内部功能&#xff0c;因此具有高度可移植性&#xff0c;并且应该在任何支持 和 功能的 Arduino&#xff08;类似&#xff09…

模拟火车订票系统---python序列

if __name__ __main__:#创建车辆信息列表list["车次","出发站-到达站","出发时间","到达时间","历时","余票"]trainNumber[T40,T298,Z158,Z62]address[长春-北京,长春-北京,长春-北京,长春-北京]getTime[00:12,0…

简单介绍一下js中的构造函数、原型对象prototype、对象原型__proto__、原型链

构造函数 function Star (uname, age){this.uname unamethis.age agethis.sing function(){ log(唱歌~) }}let xzq new Star(薛之谦, 30)let ldh new Star(刘德华, 20)log(ldh) // { uname: 刘德华, age: 20, sing: f }ldh.sing() // 唱歌~log(ldh.sing xzq.sing) // fal…

DevEco Studio安装

HUAWEI DevEco Studio For OpenHarmony&#xff08;以下简称DevEco Studio&#xff09;是基于IntelliJ IDEA Community开源版本打造&#xff0c;面向OpenHarmony全场景多设备的一站式集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供工程模板创建、开发、编译…

uniapp时间选择器

Uniapp 是一套基于Vue.js 开发的跨平台开发框架&#xff0c;它能够以一套代码编译成多个平台的应用&#xff0c;包括 iOS、Android、H5 等。要实现时间选择器可以使用uni-app提供的组件picker&#xff0c;它可以用于选择器、时间选择器、日期选择器等场景。 以下是一个简单的时…

Docker的简单介绍

Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 Docker…

服务器被入侵了怎么去排查

在当今数字化时代&#xff0c;网络安全问题变得越来越重要。其中&#xff0c;服务器被入侵是一种常见的安全威胁。当服务器被入侵时&#xff0c;我们需要采取一系列措施来排查和解决问题。本文将为您提供服务器被入侵后的排查步骤。 第一步&#xff1a;确认服务器被入侵 当发现…

用opencv绘制一个箭头,沿着圆运动并留下运动轨迹(c++)

用opencv绘制一个箭头&#xff0c;沿着圆运动并留下运动轨迹&#xff08;c&#xff09;。基于该例程可以简单实现一个运动小车的模型。 using namespace cv;int main() {// 创建一个黑色背景的图像&#xff0c;大小为400*400Mat image(400, 400, CV_8UC3, Scalar(0, 0, 0));//…

C语言进阶之路-基本数据小怪篇

目录 一、学习目标&#xff1a; 二、数据基本类型 整型 浮点型 / 实型 字符 字符串 布尔型数据 三、重要的杂七杂八知识点 常量与变量 标准输入 sizeof运算符&#xff1a; 类型转换 数据类型的本质 整型数据尺寸 可移植性整型 拿下第一个C语言程序 总结 一、学…

UE小计:顶部工具栏按钮添加下拉列表,大纲列表、资源管理窗口右键添加按键

下拉列表 void FYouPluginsModule::StartupModule() {FYouToolStyle::Initialize();FYouToolStyle::ReloadTextures();FYouToolCommands::Register();PluginCommands MakeShareable(new FUICommandList);PluginCommands->MapAction(FYouToolCommands::Get().PackByCloudAc…

web前端之引入svg图片、html引入点svg文件、等比缩放、解决裁剪问题、命名空间、object标签、阿里巴巴尺量图、embed标签、iframe标签

MENU 前言直接在页面编写svg使用img标签引入通过css引入使用object标签引入其他标签参考资料 前言 web应用开发使用svg图片的方式&#xff0c;有如下几种方式 1、直接在页面编写svg 2、使用img标签引入 3、通过css引入 4、使用object标签引入 直接在页面编写svg 在html页面直接…

LeetCode Hot100 101.对称二叉树

题目&#xff1a; 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 代码&#xff1a; class Solution {public boolean isSymmetric(TreeNode root) {if(rootnull || (root.leftnull && root.rightnull)) {return true;}//用队列保存节点LinkedList<…

高防CDN在网站搭建中的优劣势分析

随着网络攻击的日益增多和恶性化&#xff0c;网站安全性成为网站搭建中至关重要的一环。高防CDN&#xff08;Content Delivery Network&#xff09;作为一种有效的安全防护手段&#xff0c;扮演着保护网站免受恶意攻击的角色。本文将从网站搭建的角度&#xff0c;深入分析高防C…

vue3+ts+vite 打包报错 TS2304: Cannot find name ‘xxx‘

都说vue组合式api好&#xff0c;那必须来一套试试&#xff0c;而且element ui的demo全是lang"ts"了 改成组合式api没问题&#xff0c;但是当加上lang"ts"之后就疯狂报错 src/components/table/tableshow.vue:7:28 - error TS2304: Cannot find name tempsh…

【网易云商】构建高效 SaaS 系统的技术要点与最佳实践

SaaS 是什么 定义 相信大家都对云服务中的 IaaS、PaaS、SaaS 早就有所耳闻&#xff0c;现在更是衍生出了 aPaaS、iPaaS、DaaS 等等的类似概念。对于 SaaS 也有各种各样的定义&#xff0c;本文给出的定义是&#xff1a; SaaS 是一种基于互联网提供服务和软件的交付模式&#xf…

水果编曲软件FL Studio21.2下载安装教程

简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前最新版本(包括测试版本)是FL Studio21.2&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音…

工业以太网交换机未来发展中的几个趋势

随着工业自动化不断发展和智能制造的推进&#xff0c;工业以太网交换机在未来的应用中将面临更多的发展机遇和挑战。在工业以太网交换机的未来发展中&#xff0c;有几个方面将成为趋势。 网络虚拟化 随着工业自动化系统规模的不断扩展&#xff0c;网络虚拟化将成为未来的发展方…

总结1065

今日共计学习11h47m&#xff0c;今日图书馆冷清了不少&#xff0c;在最后关头&#xff0c;越学心里越没谱。做22年的真题做到怀疑人生&#xff0c;真题每年难度不一&#xff0c;可以出的很难&#xff0c;也可以出得相对简单。出的难的&#xff0c;计算量大肯定是其中一部分。今…

四、防火墙-NAT Server

学习防火墙之前&#xff0c;对路由交换应要有一定的认识 NAT Server1.1.基本原理1.2.多出口场景下的NAT Server1.3.源进源出 —————————————————————————————————————————————————— NAT Server 一般对用户提供一些可访问的…

Python开发运维:Django 4.2.7 使用Celery 5.3.5 完成异步和定时任务

目录 一、实验 1.Django使用Celery完成异步和定时任务 二、实验 1. 如何查看Django版本 一、实验 1.Django使用Celery完成异步和定时任务 (1)安装Django (2)新建Django项目 (3)初始框架 (4)urls.py引用视图views from django.contrib import admin from django.urls imp…