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

调用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,.....);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值