java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值
标题的意思是:
通过反射写一个类,类中有个方法。该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值
代码:
// 该方法的参数列表是一个类的 类名、成员变量、给变量的赋值
public void setProperty(Object obj, String PropertyName, Object value)
throws NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException { // 获取obj类的字节文件对象
Class c = obj.getClass(); // 获取该类的成员变量
Field f = c.getDeclaredField(PropertyName); // 取消语言访问检查
f.setAccessible(true); // 给变量赋值
f.set(obj, value); }
测试类:
public static void main(String[] args) throws NoSuchFieldException,
SecurityException, IllegalArgumentException, IllegalAccessException { // 创建Person类的对象
Person p = new Person();
// 私有成员变量无法直接访问
// 这时候就通过刚刚写的Tool类来直接调用
Tool t = new Tool();
// 通过Tool的方法直接更改私有成员变量name
t.setProperty(p, "name", "张三");
// 更改未定义类型成员变量
t.setProperty(p, "age", 13);
// 更改公共成员变量
t.setProperty(p, "sex", '男');
System.out.println(p); // 其实除了私有成员变量,其它的都可以通过以前的方法赋值
} } class Person {
// 该类有私有成员变量,未定义类型成员变量,公共成员变量
private String name;
int age;
public char sex; @Override
public String toString() {
return name + "--" + sex + "--" + age;
} }
java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值的更多相关文章
- Java反射机制(三):调用对象的私有属性和方法
一. 通过反射调用类中的方法 在正常情况下,得到类的对象后,我们就可以直接调用类中的方法了,如果要想调用的话,则肯定必须清楚地知道要调用的方法是什么,之后通过Class类中的getMethod方法,可 ...
- Java---类反射(2)---类反射加强
经过前面的一篇博客,Java-类反射(1),相信大家对类反射有了一定的了解了. 下面来进行对类反射的加强,了解一下怎么通过类反射去new一个对象, 怎么通过类反射去访问其他类的方法. 怎么通过类反射去 ...
- Python面试题之Python对象反射、类反射、模块反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 一.getattr 对象获取 class Manager: role = &quo ...
- java 27 - 6 反射之 通过配置文件运行类中的方法
在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: public class Dog { public void eat() { S ...
- [Think In Java]基础拾遗2 - 多态、反射、异常、字符串
目录 第八章 多态第十四章 类型信息第十二章 通过异常处理错误第十三章 字符串 第八章 多态 1. 前期绑定 & 后期绑定 绑定是指将方法调用同一个方法主体关联起来的这么一个过程.如果在程序执 ...
- JAVA基础 (二)反射 深入解析反射机制
在谈论到反射这个问题时,你是否有例如以下疑问? 不管是在.NET还是Java中反射的原理和机制是一样的,理解了一种还有一种就能够迎刃而解,想要理解反射首先须要了解底层的一些概念和执行.理解了反射有助于 ...
- Java 反射机制[Method反射]
Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...
- Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...
- Java高级篇(四)——反射
之前写到了设计模式的代理模式,因为下一篇动态代理等内容需要用到反射的知识,所以在之前Java篇的基础上再写一篇有关反射的内容,还是以实际的程序为主,了解反射是做什么的.应该怎么用. 一.什么是反射 反 ...
随机推荐
- SPC2014 :“FOSL”不是替代InfoPath,只是另外一种创建表单的方式
今天在SPC2014微软宣布他们技术路线图.其实,没有足够证据替代InfoPath,只是另外的一种尝试 - FOSL(对SharePoint列表表单). FOSL使用相同的引擎,用于创建表单的访问服务 ...
- 超人学院二期学员分享hadoop工作经验
定于2月17日--2月23日的某一天,邀请咱们学员分享一下hadoop工作经验.对于没工作过的同学或者没从事过hadoop工作的同学,抓住机会啊,你可以提前准备自己关心的各种问题! 具体时间请关注QQ ...
- 高级SQL语句
改变数据 insert record 插入一行 insert into foods (name, type_id) values ('Cinnamon Bobka', 1); 如果在insert语句中 ...
- 删除项目中的CocoaPods
项目中如果使用了CocoaPods,但需要彻底删除,怎么办? 1.进入项目根目录,删除与Pod相关的文件 2.打开项目 3.删除项目中的Pods文件夹 4.编译,会报错,解决方法如下 5.编译,还会报 ...
- 通过settings.db自定义Android系统默认设置
Android的系统设置数据存放在/data/data/com.android.providers.settings/databases/settings.db 中 数据库结构如下: 数据库中的默认数 ...
- 普通View的measure流程
对于普通的view,其测量在ViewGroup中的measureChildWithMargins函数中调用child view的measure开始测量. 1:从measure函数开始 public f ...
- Android实现欢迎界面,点击进入应用
在主线程中开启一个新线程,每隔100ms检查一下时间是否到达自己预设的显示时间,到达则进入应用 实现屏幕的触摸事件,当触摸的时候,进入应用 package com.example.administra ...
- CPU卡与M1卡的区别
简单来讲CPU卡比M1卡更加安全.扩展性更好.支持更多应用 CPU卡 M1 操作系统 带有COS系统 无COS系统 硬件加密模块 硬件DES运算模块 无实现算法的硬件加密模块 算法支持 标准DES ...
- Access界面基础操作
1. 显示表 2. 条件“或” SELECT 研究生.姓名, 研究生.性别, 研究生.入学分数 FROM 研究生 WHERE (研究生.性别="女" AND 研究生.入学分数< ...
- 2、HDFS和Yarn的基础学习笔记
日志 --排错 .log:通过log4j记录的,记录大部分应用程序的日志信息 .out:记录标准输出和标准错误日志,少量记录 hdfs 常用shell -ls -put < ...