java反射机制调⽤gett⽅法调⽤get t ⽅法,需要 某⼀个类 类中的字段 字段的值来实现
代码:
package entity;
import flect.Method;
import flect.Field;
import java.beans.PropertyDescriptor;
import com.wzty.del.SiteRule;
public class PropertyUtil {
public static PropertyDescriptor getPropertyDescriptor(Class clazz,
直升机发动机String propertyName) {
StringBuffer sb = new StringBuffer(); // 构建⼀个可变字符串⽤来构建⽅法名称
Method tMethod = null;
Method getMethod = null;
PropertyDescriptor pd = null;
try {
Field f = DeclaredField(propertyName); // 根据字段名来获取字段
if (f != null) {
// 构建⽅法的后缀
String methodEnd = propertyName.substring(0, 1).toUpperCa()
+ propertyName.substring(1);
sb.append("t" + methodEnd); // 构建t⽅法孙皓
tMethod = String(),
new Class[] { f.getType() });
sb.delete(0, sb.length()); // 清空整个可变字符串
sb.append("get" + methodEnd); // 构建get⽅法
// 构建get ⽅法订婚祝福语大全
getMethod = String(),
new Class[] {});
// 构建⼀个属性描述器 把对应属性 propertyName 的 get 和 t ⽅法保存到属性描述器中
pd = new PropertyDescriptor(propertyName, getMethod, tMethod);
}
} catch (Exception ex) {
民贵君轻ex.printStackTrace();结婚纪念日感言
}
return pd;
}
public static void tProperty(Object obj, String propertyName, Object value) {
Class clazz = Class();// 获取对象的类型
PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);
Method tMethod = pd.getWriteMethod();// 从属性描述器中获取 t ⽅法
try {
tMethod.invoke(obj, new Object[] { value });// 调⽤ t
// ⽅法将传⼊的value值保存属性中去
} catch (Exception e) {
e.printStackTrace();
}
}
public static Object getProperty(Object obj, String propertyName) {
Class clazz = Class();// 获取对象的类型
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.tProperty(st, field, value);
System.out.Author());
}
}
代码中使⽤的类介绍:
Method类:Method 提供关于类或接⼝上单独某个⽅法(以及如何访问该⽅法)的信息。所反映的⽅法可能是类⽅法或实例⽅法(包括抽象⽅法)。
此类被final 修饰,不能继承,继承和实现了AccessibleObject 和 GenericDeclaration Member.
根据此类可以:invoke ⽅法 调⽤该⽅法。
Field类:是类上⾯的(对于类属性和普通属性,下⾯的是⼀样的),使⽤get ⽅法得到本属性的值(对于某⼀个实例对象或者类对象),注意根据getDeclaredField得到的Field, 对于私有属性 不能直接使⽤get⽅法,必须 先 tAccessible()才能使⽤get访问值,public等其他的可以使⽤。
使⽤Field 对象赋值:t(对象,值)
功能:得到对象在此字段上的值等。
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,.....);