Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值
大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属性,提供一对共有的get,set方法来访问私有属性。一般情况下都会这样做!但遇到特殊情况呢?比如,先现有一个需求:访问一个Java类的私有属性,并且该类不提供访问该私有属性的共有方法!下面就为大家介绍一种方法访问java类的私有属性。
要获取java类的私有属性就不得不先介绍一个类PropertyDescriptor。该类为属性描述符类。通过该类提供的一系列方法来访问java类中的私有属性。
下面看一段代码:
BeanUtils.java
package yw.javaben; import java.beans.PropertyDescriptor;
import java.lang.reflect.Method; /**
* 获取私有属性值JavaBean的帮助类
* @author yw-tony
*
*/
public class BeanUtils {
private PropertyDescriptor dp = null;
private String propertyName;
private Object obj;
/**
* 构造方法
* @param objName 属性名称
* @param obj 要操作的对象
*/
public BeanUtils(String objName,Object obj){
try{
this.propertyName = objName;
this.obj = obj;
dp = new PropertyDescriptor(propertyName, obj.getClass());
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 获取javabean私有属性的值
* @return
* @throws Exception
*/
public Object getProperty() throws Exception {
//获取对象属性方法
Method method = dp.getReadMethod();
//获取属性对应的值
Object retValue = method.invoke(obj); return retValue;
}
/**
* 设置私有属性的值
* @param setValue
* @throws Exception
*/
public void setProperty(Object setValue) throws Exception {
Method method = dp.getWriteMethod();
method.invoke(obj, setValue);
} }
BeanEntity.java
package yw.javaben; /**
* 验证属性标识符的javabean
* @author yw-tony
*
*/
public class BeanEntity {
private int x;
private int y = 10;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
} }
JavaBeanTest.java
public class JavaBeanTest {
/**
* 测试JavaBean
*
* @param args
*/
public static void main(String[] args) throws Exception {
BeanEntity bean = new BeanEntity();
String x = "x";//BeanEntity的属性名称
BeanUtils utils = new BeanUtils(x, bean);
utils.setProperty(12);
Object value = utils.getProperty();
System.out.println(value);
}
}
Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值的更多相关文章
- 使用springboot mybatis 查询时实体类中的驼峰字段值为null
看到返回结果以后主要分析了一下情况: 实体类的get.set方法确实 mapper.xml文件中的resultMap.resultType等原因导致 数据库中数据存在问题 经过检查与验证发现以上都不存 ...
- C#利用反射获取实体类的主键名称或者获取实体类的值
//获取主键的 PropertyInfo PropertyInfo pkProp = ).FirstOrDefault(); //主键名称 var keyName=pkProp.Name; //实体类 ...
- c# 反射得到实体类的字段名称和值,DataTable转List<T>
/// <summary> /// 反射得到实体类的字段名称和值 /// var dict = GetProperties(model); /// </summary> /// ...
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- Java定义bean实体类中的变量时变量名的问题
首先:TMD,这个问题花了我两个多小时,居然是因为一个字母的大小写导致的,我瞬间就&Y^%^&%&()*%¥%¥¥&^#@%&; 事情是酱紫的: 我定义了一个变 ...
- C#、Python中分别是怎么实现通过字符串获取实体类的值以及给实体类赋值
一.引入 最近遇到一个项目里面的功能,在给实体类赋值的时候,由于赋值字段是动态生成的,所以如果用常用的方法(直接实体类的名称.字段名=要赋的值),将会生成很多无用的代码,所以找到了一个通过反射的赋值与 ...
- 利用Java反射机制对实体类的常用操作工具类ObjectUtil
代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...
- 读取Excel文件存储在实体类中
1.Maven文件 <!--读取Excel的架包--> <dependency> <groupId>org.apache.poi</groupId> & ...
- Hibernate jpa 在实体类中对于时间的注解
在时间类型DATE 属性上添加一个 @Temporal(TemporalType.DATE)(精确到年月日)@Temporal(TemporalType.TIME)(精确到时分秒)@Temporal( ...
随机推荐
- HDU2444(KB10-B 二分图判定+最大匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- CentOS 7环境下Pycharm安装流程记录
1.准备安装文件: 方法1: 使用内置火狐浏览器访问下载最新格式为tar.gz的压缩包 网址:https://www.jetbrains.com/pycharm/download/previous.h ...
- 查看linux 内存
1.vmstat vmstat命令显示实时的和平均的统计,覆盖CPU.内存.I/O等内容.例如内存情况,不仅显示物理内存,也统计虚拟内存. $ vmstat -s 2.top top命令提供了实时的运 ...
- Linux 操作方法(一)
cd +地址 ->可进入地址 cd .. ->返回上级 ll ->显示当前目录下的所有文件(显示所有文件,包括隐藏,还有显示文件信息) ls ->显示当前目录下的所有文件 su ...
- 用windows浏览器打开Linux的Jupyter notebook开发、调试示例
1.场景,在windows浏览器中打开Linux环境下的jupyter notebook.Jupyter notebook开启远程服务,Spark.python计算环境在Linux服务器中,而工作环境 ...
- ActiveReports 报表控件V12新特性 -- RPX报表转换为RDL报表
ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...
- terminate called after throwing an instance of 'std::bad_alloc'
这个错误,网上搜索到的资料大多是指向内存不足或者内存碎片问题,如下链接 http://bbs.csdn.net/topics/330000462 http://stackoverflow.com/qu ...
- Android Studio 一个完整的APP实例(附源码和数据库)
前言: 这是我独立做的第一个APP,是一个记账本APP. This is the first APP, I've ever done on my own. It's a accountbook APP ...
- Reactjs-generator-cli 一款基于Ink构建用于快速搭建React应用的CLI scaffolding工具
Reactjs-generator-cli 一款基于Ink构建用于快速搭建React应用的CLI scaffolding工具 A simple CLI for scaffolding React.js ...
- 【three.js练习程序】创建简单物理场景
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...