博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA反射技术应用-ReflectUtil
阅读量:5999 次
发布时间:2019-06-20

本文共 2458 字,大约阅读时间需要 8 分钟。

  hot3.png

public class ReflectUtil {
 public static Object setFieldValueDefault(Object target, String fname,
   Class ftype, Object fvalue) {
  if (target == null
    || fname == null
    || "".equals(fname)
    || (fvalue != null && !ftype
      .isAssignableFrom(fvalue.getClass()))) {
   return target;
  }
  Class clazz = target.getClass();
  Field[] fs = clazz.getDeclaredFields();
  try {
   for (int i = 0; i < fs.length; i++) {
    if (fname.toLowerCase().equals(fs[i].getName().toLowerCase())) {
     Method method = clazz.getDeclaredMethod("set"
       + Character.toUpperCase(fs[i].getName().charAt(0))
       + fs[i].getName().substring(1), String.class);
     if (!Modifier.isPublic(method.getModifiers())) {
      method.setAccessible(true);
     }
     method.invoke(target, fvalue);
    }
   }
  } catch (Exception me) {
   try {
    Field field = clazz.getDeclaredField(fname);
    if (!Modifier.isPublic(field.getModifiers())) {
     field.setAccessible(true);
    }
    field.set(target, fvalue);
   } catch (Exception fe) {
    fe.getStackTrace();
   }
  }
  return target;
 }

 public static Object setFieldValue(Object target, String fname, Class ftype,

   Object fvalue) {
  if (target == null
    || fname == null
    || "".equals(fname)
    || (fvalue != null && !ftype
      .isAssignableFrom(fvalue.getClass()))) {
   return target;
  }
  Class clazz = target.getClass();
  Field[] fs = clazz.getDeclaredFields();
  try {
   Method method = clazz.getDeclaredMethod("set"
     + Character.toUpperCase(fname.charAt(0))
     + fname.substring(1), String.class);
   if (!Modifier.isPublic(method.getModifiers())) {
    method.setAccessible(true);
   }
   method.invoke(target, fvalue);
  } catch (Exception me) {
   try {
    Field field = clazz.getDeclaredField(fname);
    if (!Modifier.isPublic(field.getModifiers())) {
     field.setAccessible(true);
    }
    field.set(target, fvalue);
   } catch (Exception fe) {
    fe.getStackTrace();
   }
  }
  return target;
 }

 public static Object getFieldValue(Object target, String fname, Class ftype) {

  if (target == null || fname == null || "".equals(fname)) {
   return null;
  }
  Class clazz = target.getClass();
  try {
   Method method = clazz.getDeclaredMethod("get"
     + Character.toUpperCase(fname.charAt(0))
     + fname.substring(1), ftype);
   if (!Modifier.isPublic(method.getModifiers())) {
    method.setAccessible(true);
   }
   return method.invoke(target);
  } catch (Exception me) {
   try {
    Field field = clazz.getDeclaredField(fname);
    if (!Modifier.isPublic(field.getModifiers())) {
     field.setAccessible(true);
    }
    return field.get(target);
   } catch (Exception fe) {
    fe.getStackTrace();
   }
  }
  return null;
 }
}

转载于:https://my.oschina.net/lus/blog/117756

你可能感兴趣的文章
用 Google Map 的 Geocoder 接口来反向地址解析
查看>>
在中小型公司如何做好测试——论测试计划的重要性
查看>>
BSS段、数据段、代码段、堆与栈
查看>>
python调用c/c++写的dll
查看>>
ClassTag 、Manifest、ClassManifest、TypeTag代码实战及其在Spark中的应用源码解析之Scala学习笔记-37...
查看>>
python-尝试将Excel文件保存为图片并加上水印
查看>>
IDA动态调试SO文件
查看>>
[LeetCode] Edit Distance 解题报告
查看>>
Objective-C快速上手
查看>>
7、log4j.properties
查看>>
网络通信之检测远端连接是否断开连接
查看>>
Disjoint Sets
查看>>
centos 6.8安装java环境
查看>>
各种上传拿shell
查看>>
算法名称
查看>>
整数加减法练习
查看>>
javascript
查看>>
CF709B Checkpoints 模拟
查看>>
PHP简单计算器
查看>>
[self performselector: withObject: afterDelay:];一定时间后执行某个方法
查看>>