大家都知道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获取实体类中私有属性的值,并给私有属性赋值的更多相关文章

  1. 使用springboot mybatis 查询时实体类中的驼峰字段值为null

    看到返回结果以后主要分析了一下情况: 实体类的get.set方法确实 mapper.xml文件中的resultMap.resultType等原因导致 数据库中数据存在问题 经过检查与验证发现以上都不存 ...

  2. C#利用反射获取实体类的主键名称或者获取实体类的值

    //获取主键的 PropertyInfo PropertyInfo pkProp = ).FirstOrDefault(); //主键名称 var keyName=pkProp.Name; //实体类 ...

  3. c# 反射得到实体类的字段名称和值,DataTable转List<T>

    /// <summary> /// 反射得到实体类的字段名称和值 /// var dict = GetProperties(model); /// </summary> /// ...

  4. java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

  5. Java定义bean实体类中的变量时变量名的问题

    首先:TMD,这个问题花了我两个多小时,居然是因为一个字母的大小写导致的,我瞬间就&Y^%^&%&()*%¥%¥¥&^#@%&; 事情是酱紫的: 我定义了一个变 ...

  6. C#、Python中分别是怎么实现通过字符串获取实体类的值以及给实体类赋值

    一.引入 最近遇到一个项目里面的功能,在给实体类赋值的时候,由于赋值字段是动态生成的,所以如果用常用的方法(直接实体类的名称.字段名=要赋的值),将会生成很多无用的代码,所以找到了一个通过反射的赋值与 ...

  7. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  8. 读取Excel文件存储在实体类中

    1.Maven文件 <!--读取Excel的架包--> <dependency> <groupId>org.apache.poi</groupId> & ...

  9. Hibernate jpa 在实体类中对于时间的注解

    在时间类型DATE 属性上添加一个 @Temporal(TemporalType.DATE)(精确到年月日)@Temporal(TemporalType.TIME)(精确到时分秒)@Temporal( ...

随机推荐

  1. php面向对象精要(2)

    1,self与parent关键字 >self指向当前的类,常用来访问静态成员,方法和常量 >parent指向父类,常用来调用父类的构造函数和方法和成员,也可以用来访问常量 <?php ...

  2. linux系统编程:获取glibc的版本号

    我的环境是ubuntu16.04 glibc官网:http://www.gnu.org/software/libc/libc.html 方法一.一般来说,涉及到库调用的程序,在链接时候都会链接到gli ...

  3. js-ES6学习笔记-Class(5)

    1.原生构造函数会忽略apply方法传入的this,也就是说,原生构造函数的this无法绑定,导致拿不到内部属性.比如,Array构造函数有一个内部属性[[DefineOwnProperty]],用来 ...

  4. Struts 2(二)

    一,框架的扩展名问题: ,struts2框架的默认扩展名:.action和空字符串.在框架的属性文件default.properties中进行默认配置:struts.action.extension= ...

  5. python实现分页插件

    class Pages: def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):#pager_num ...

  6. JS获取填报扩展单元格控件的值

    1. 问题描述 填报预览时,我们想获取到某个控件的值相对来说较容易.但如果控件是扩展的,就只能获取到第一个值,无法根据扩展一行行获取对应的值. 例:本意是想获取到袁成洁,结果还是获取到第一个单元格值孙 ...

  7. MaterialRefreshLayout+ListView 下拉刷新 上拉加载

    效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...

  8. 使用Webpack对Css文件压缩处理的思考

    问题的起因: 使用 bulma.css ,通过webpack打包后样式出错,查看压缩代码,发现代码从css的 long hand 属性被压缩为 short hand(PS: 什么是long hand ...

  9. Python+Selenium笔记(十一):配置selenium Grid

    (一) 前言 Selenium Grid可以将测试分布在若干个物理或虚拟机器上,从而实现分布方式或并行方式执行测试. 这个链接是官方的相关说明. https://github.com/Selenium ...

  10. 留言板0.4_model中的数据库(2)

    今天就讲讲:如何将后台数据呈现在HTML页面中,以及url配置时的两点技巧吧. 1.首先在"views.py"中提取出后台数据 def getform(request): mess ...