调用get set 方法,需要 某一个类  类中的字段  字段的值来实现

代码:

package entity;

import java.lang.reflect.Method;

import java.lang.reflect.Field;

import java.beans.PropertyDescriptor;

import com.wzty.platform.domain.model.SiteRule;

public class PropertyUtil {

public static PropertyDescriptor getPropertyDescriptor(Class clazz,

String propertyName) {

StringBuffer sb = new StringBuffer(); // 构建一个可变字符串用来构建方法名称

Method setMethod = null;

Method getMethod = null;

PropertyDescriptor pd = null;

try {

Field f = clazz.getDeclaredField(propertyName); // 根据字段名来获取字段

if (f != null) {

// 构建方法的后缀

String methodEnd = propertyName.substring(0, 1).toUpperCase()

+ propertyName.substring(1);

sb.append("set" + methodEnd); // 构建set方法

setMethod = clazz.getDeclaredMethod(sb.toString(),

new Class[] { f.getType() });

sb.delete(0, sb.length()); // 清空整个可变字符串

sb.append("get" + methodEnd); // 构建get方法

// 构建get 方法

getMethod = clazz.getDeclaredMethod(sb.toString(),

new Class[] {});

// 构建一个属性描述器 把对应属性 propertyName 的 get 和 set 方法保存到属性描述器中

pd = new PropertyDescriptor(propertyName, getMethod, setMethod);

}

} catch (Exception ex) {

ex.printStackTrace();

}

return pd;

}

public static void setProperty(Object obj, String propertyName, Object value) {

Class clazz = obj.getClass();// 获取对象的类型

PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);

Method setMethod = pd.getWriteMethod();// 从属性描述器中获取 set 方法

try {

setMethod.invoke(obj, new Object[] { value });// 调用 set

// 方法将传入的value值保存属性中去

} catch (Exception e) {

e.printStackTrace();

}

}

public static Object getProperty(Object obj, String propertyName) {

Class clazz = obj.getClass();// 获取对象的类型

PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);

Method getMethod = pd.getReadMethod();// 从属性描述器中获取 get 方法

Object value = null;

try {

value = getMethod.invoke(clazz, new Object[] {});// 调用方法获取方法的返回值

} catch (Exception e) {

e.printStackTrace();

}

return value;// 返回值

}

public static void main(String args[]){

String field ="author";

String value="hello";

SiteRule st = new SiteRule();

PropertyUtil.setProperty(st, field, value);

System.out.println(st.getAuthor());

}

}

代码中使用的类介绍:

Method类:Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。

此类被final 修饰,不能继承,继承和实现了AccessibleObject 和 GenericDeclaration  Member.

根据此类可以:invoke 方法 调用该方法。

Field类:是类上面的(对于类属性和普通属性,下面的是一样的),使用get 方法得到本属性的值(对于某一个实例对象或者类对象),注意根据getDeclaredField得到的Field,          对于私有属性 不能直接使用get方法,必须                    先 setAccessible()才能使用get访问值,public等其他的可以使用。

使用Field 对象赋值:set(对象,值)

功能:得到对象在此字段上的值等。

PropertyDescriptor类:PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性

class类: class 常用方法: getDeclaredField("") 可以得到单一属性 任何权限都可以,得不到父类的属性(就是本类代码中编写的东西)

getField(“”)只能是公有的。可以得到父类的属性(就是本类含有的属性)

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

使用class 创建对象, c。newInstance() 这是必须调用无参构造方法。调用其他构造方法使用:

a)         通过Class类中的getConstructors()取得本类中的全部构造方法。

b)         向构造方法中传递一个对象数组进去,里面包含了构造方法中所需的各个参数。

c)         之后通过Constructor实例化对象

功能:可以强制类型转化为子类,得到类中的注释,得到类加载器,得到类中所有的成员的类,

得到类中的方法,得到所有的属性,得到方法等。

Constructor类:构造方法类

Modifier类:修饰符的类

根据class 取得对应的方法:getMethod("方法名")

如何取得带有参数的方法:getMethod("方法名",参数类型.class,.....);

java的set和get方法实例化_java反射机制 调用get set 方法 | 学步园相关推荐

  1. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...

    想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...

  2. java通过属性名获取属性值_java反射机制根据属性名获取属性值的操作

    java反射机制根据属性名获取属性值的操作,属性,对象,反射,访问权限,还可以 java反射机制根据属性名获取属性值的操作 易采站长站,站长之家为您整理了java反射机制根据属性名获取属性值的操作的相 ...

  3. 利用Java反射机制调用含数组参数的方法

    http://yourmitra.wordpress.com/2008/09/26/using-java-reflection-to-invoke-a-method-with-array-parame ...

  4. java反射机制知识_Java反射机制讲解,程序员必须掌握的知识点

    关注程序员7歌,一起用技术改变世界 大家好,我是程序员7歌,今天我为大家讲解Java的反射机制. 首先我们来看看反射的概念: Java反射说的就是在程序运行中,任何一个类,我们都可以知道这个类的方法和 ...

  5. java反射机制详解_Java反射机制详解

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...

  6. Java编程:Java的反射机制中的 getComponentType() 方法

    转载自  Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...

  7. 利用Java反射机制调用类的私有方法

    利用Java反射机制调用类的私有方法 引言 来吧·展示 参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn. ...

  8. java反射机制调用带参数的方法_Java反射机制:跟着代码学反射

    1. 前言 在OOP的世界里,万物皆对象.也就是说,我们可以将任何东西抽象成一个对象. 比如人,可以抽象成一个Person类,通过new Person()来实例化一个对象:再比如鸭子,可以抽象成一个D ...

  9. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

最新文章

  1. 腾讯3366小游戏站算法被破解
  2. C++中map容器的说明和使用技巧
  3. parted新建分区_扩展分区及文件系统(Linux)
  4. word文档查重_「毕业之家」揭秘:大学生知网论文查重的规则及查重原理
  5. s7.net 写数据到plc_西门子1200复位PLC、欧姆龙常见问题解答
  6. MapReduce过程详解及其性能优化
  7. (2)散列表是怎么进行查找的
  8. java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
  9. form表单input使用disabled后提交不能获取表单值的解决方法
  10. python什么是调用_Python中包(package)的调用方式
  11. label包裹input,点击label响应两次解决方法
  12. Java计算的XML面试题
  13. Nginx源码分析 - Event事件篇 - Event模块和配置的初始化(16)
  14. linux怎样重启命令,Linux重启命令介绍
  15. HTML 制作一个通讯录
  16. smss lsass http://laji.xrlyy.com病毒解决办法
  17. 计算机网络的基础知识
  18. 树的中序遍历+前序遍历得到后序遍历
  19. 第三方微信+支付宝个人免签支付源码
  20. 基于Vue实现的网页音乐播放器

热门文章

  1. java集合的方法及使用详解
  2. 对话框--popdialog总结
  3. uoj #111. 【APIO2015】Jakarta Skyscrapers
  4. Java三大器之过滤器(Filter)的工作原理和代码演示
  5. 进度管理工具 planner
  6. 535 5.7.8 Error: authentication failed: generic failure安装EMOS时SMTP测试报错
  7. COOKIE和Session的原理及异同
  8. NetScaler配置只允许某个组访问桌面
  9. [HDU 2096] 小明A+B
  10. JavaScript 代码的加入