首页 > 编程语言 >Java通过反射给final对象赋值(代码库)

Java通过反射给final对象赋值(代码库)

时间:2023-04-26 16:44:49浏览次数:41  
标签:static return Object public Java isEmpty obj final 赋值

直接赋值会报错
Method threw 'java.lang.UnsupportedOperationException' exception.

给没有set方法的类如下赋值

public static void setFieldValue(Object obj, String fieldName, Object val) {
   if (isEmpty(obj) || isEmpty(fieldName))
      return;
   Class superClass=obj.getClass();
   List<Field> clazzs=new ArrayList<>();
   while(superClass!=null){
      clazzs.addAll(Arrays.asList(superClass.getDeclaredFields()));
      superClass=superClass.getSuperclass();
   }
   try {
      for (Field f : clazzs) {
         if (f.getName().equals(fieldName)) {
            f.setAccessible(true);
            f.set(obj, val);
            return;
         }
      }
   } catch (IllegalArgumentException e) {
      logger.error("error", e);
   } catch (IllegalAccessException e) {
      logger.error("error", e);
   }
}

public static boolean isEmpty(String...strings){
   if(strings==null||strings.length==0)
      return true;
   for(String s : strings){
      if(!isEmpty(s))
         return false;
   }
   return true;
}

public static boolean isEmpty(String str) {
   return str == null || str.trim().length() == 0;
}

public static boolean isEmpty(Collection<?> col) {
   return col == null || col.size() == 0;
}

public static boolean isEmpty(Map<?, ?> map) {
   return map == null || map.size() == 0;
}

public static boolean isEmpty(Object[] obj) {
   return obj == null || obj.length == 0;
}

public static boolean isEmpty(Object obj) {
   if (obj == null)
      return true;
   else if (obj instanceof String) {
      String str = (String) obj;
      return str.trim().length() == 0;
   } else if (obj instanceof Map) {
      Map<?, ?> map = (Map<?, ?>) obj;
      return map.size() == 0;
   } else if (obj instanceof Collection) {
      Collection<?> col = (Collection<?>) obj;
      return col.size() == 0;
   } else if (obj instanceof Dictionary) {
      Dictionary<?, ?> dic = (Dictionary<?, ?>) obj;
      return dic.size() == 0;
   } else if (obj instanceof Object[]) {
      Object[] objs = (Object[]) obj;
      return objs.length == 0;
   }
   return false;

}

public static boolean notEmpty(Object obj) {
   return !isEmpty(obj);
}

 

标签:static,return,Object,public,Java,isEmpty,obj,final,赋值
From: https://www.cnblogs.com/acm-bingzi/p/java_reflection_final.html

相关文章

  • 测试Java初学者建议
    作为测试工程师,我们需要具备扎实的编程技能,能够熟练掌握至少一门编程语言。因为测试工作本身就需要编写测试脚本、开发自动化测试工具和测试框架等,这些工作离不开编程语言的支持。同时,编程语言的不断更新和变化也要求我们不断学习和提升。选择一门适合自己的编程语言学习,可以帮助......
  • Android进阶之路 - Java 单元测试
    在此之前,我在单元测试的时候,往往会单独创建一个Demo去进行功能实现,这俩天正好闲下来,所以快速的掌握了一下这个知识点,挺简单的,下面看图说话,看完你就出师了Lookhere~:此文讲的并不高深,扩展也有限,我的目的仅仅是初步且快速的掌握单元测试使用方式,从而提升自己的开发效率~单元......
  • 打卡4(java)
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);inta=sc.nextInt(),b=sc.nextInt();intc=sc.nextInt(),d=sc.nextInt();intx=a*60+b,y=c*60+d;......
  • Android结构优化 - Java、Kotlin项目结构分包
    随着Android中Java、Kotlin的混编开发场景越来越多,其中大多人都会将java文件和kt文件放在同一个资源文件夹下,在项目越来越大的情况下,我们进行代码查询、项目重构、优化都不太便捷,所以本篇主要记录通过kotlin分包、java分包来区分、整合java类和kotlin类因为目前项目为......
  • python与java 对应的加密算法
    python与java对应的加密算法1.gzip加密java的gzip加密:importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.util.Arrays;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream;publicclassHello{......
  • JAVA笔记1
    Java的基础技术包括以下内容:Java语言基础:Java语言是一种面向对象的编程语言,具有丰富的数据类型、控制结构、类和对象等基本特性。Java程序员需要熟练掌握Java语法和语义规则,以便能够编写出正确、高效的代码。Java集合框架:Java集合框架是Java中用于管理和操作数据集合的一组A......
  • java 实现PDF转TIFF 格式
    需要的依赖与代码实现下载jar直接引入本地  <dependency><groupId>com.sun.media</groupId><artifactId>jai_codec</artifactId><version>1.1-mr</version><scope>system</scope><systemPath>${p......
  • java面试题--多线程
    一、哲学家就餐问题?线程死锁问题。解决死锁问题的方法:增加锁的粒度。所有筷子放到一把大锁里。每次都锁定所有筷子。每次只能有一个哲学家抢到筷子,效率不高。有一个哲学家是左撇子。每次只能有一个哲学家抢到筷子,效率不高。每隔一个人就是一个左撇子。二、交替输出问题?解......
  • Java基础知识点API之BigInteger的存储上限
    一:数组的长度相关内容1.数组的最大长度是int的最大值:2147483647.2.数组中每一位能表示的数字的范围:  -2147483648~21474836473.数组中最多能存储的元素个数:21亿多。4.数组中每一位能表示的数字:42亿多二:BigInteger能表示的最大数字通过了解上述的数组长度的内容,能更好的理解BigI......
  • 用java调用oracle存储过程总结
    用java调用oracle存储过程总结[code]1、什么是存储过程。存储过程是数据库服务器端的一段程序,它有两种类型。一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户。另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作。......