利用java反射来动态的进行类中方法的基本操作
作为开发项目中,在一定的应用场景下使用类的反射会使代码更简洁,增加复用性,以下写的一个测试可以参考下
此类反射的demo希望对您有用
废话不多说,上代码
创建的Apple类作为开发场景中的pojo对象使用
public class Apple {
public String age;
@Column(name = "name")
private String name;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
测试类中的main方法
public static void main(String[] args) {
Apple apple = new Apple();
//类反射动态方法
String name = getClassByStr(apple);
System.out.println(name);
System.out.println(apple.getName());
}
类反射执行方法
public static String getClassByStr(Object object){
String str = "";
try {
//获取所有属性(包括私有属性)
Field[] fields = object.getClass().getDeclaredFields();
//获取所有方法
Method[] methods = object.getClass().getMethods();
for(Field e : fields){
e.setAccessible(true);
//获取当前属性中的Column注解
Column column = e.getAnnotation(Column.class);
//注解不为空并且name不为空
if(column !=null && StringUtils.isNotBlank(column.name())){
//获取所需属性值
String requestValue = "奥尼尔";
//判断不为空
if(StringUtils.isNotBlank(requestValue)){
//获取方法名称
String methodName = getMethodNameCase(e.getName());
//获取set方法
Method method = object.getClass().getMethod("set"+methodName,e.getType());
//获取get方法
Method getmethod = object.getClass().getMethod("get"+methodName);
if(method != null && getmethod != null){
//调用当前方法将requestValue放入
method.invoke(object,requestValue);
//当用get方法获取放入的值给str中返回
str = (String) getmethod.invoke(object);
}
}
}
}
}catch (Exception e ){
e.printStackTrace();
}
return str;
}
通过属性名称来获取方法名称
//通过类的属性名来获取方法名
public static String getMethodNameCase(String methodName){
try {
if(StringUtils.isEmpty(methodName)) return methodName;
String head = methodName.substring(0,1);
methodName = head.toUpperCase()+methodName.substring(1);
return methodName;
}catch (Exception e ){
e.printStackTrace();
return "";
}
}
以上就是全部,最后的输出结果是