首页 > 其他分享 >反射将值转换为特定类型

反射将值转换为特定类型

时间:2023-07-28 11:24:08浏览次数:28  
标签:反射 obj3 obj2 将值 equals else 特定 cs class

 

1.给定一个实参,以及期望类型

    private <T> T getValueByClass(Object obj, Class<T> cs) {
        String obj2 = String.valueOf(obj);
        Object obj3;
        if (cs.equals(String.class)) {
            obj3 = obj2;
        } else if (cs.equals(int.class) || cs.equals(Integer.class)) {
            obj3 = Integer.valueOf(obj2);
        } else if (cs.equals(long.class) || cs.equals(Long.class)) {
            obj3 = Long.valueOf(obj2);
        } else if (cs.equals(short.class) || cs.equals(Short.class)) {
            obj3 = Short.valueOf(obj2);
        } else if (cs.equals(byte.class) || cs.equals(Byte.class)) {
            obj3 = Byte.valueOf(obj2);
        } else if (cs.equals(float.class) || cs.equals(Float.class)) {
            obj3 = Float.valueOf(obj2);
        } else if (cs.equals(double.class) || cs.equals(Double.class)) {
            obj3 = Double.valueOf(obj2);
        } else if (cs.equals(boolean.class) || cs.equals(Boolean.class)) {
            obj3 = Boolean.valueOf(obj2);
        } else if (cs.equals(Date.class)) {
            obj3 = new Date(Long.parseLong(obj2));
        } else {
            obj3 = (T) obj;
        }
        return (T) obj3;
    }

2.实际调用

    private ClientUserAssist filter(SoMap clientUserMap, Map<String, String> link) {
        ClientUserAssist clientUserAssist = new ClientUserAssist();
        for (Field field : clientUserAssist.getClass().getDeclaredFields()) {
            try {
                Object value = clientUserMap.get(link.get(field.getName()));
                if (value == null) {
                    continue;
                }
                field.setAccessible(true);
                Object valueConvert = getValueByClass(value, field.getType());
                field.set(clientUserAssist, valueConvert);
            } catch (IllegalArgumentException | IllegalAccessException e) {
                throw new RuntimeException("属性取值出错:" + field.getName(), e);
            }
        }
        return clientUserAssist;
    }

 

标签:反射,obj3,obj2,将值,equals,else,特定,cs,class
From: https://www.cnblogs.com/upupup-999/p/17587108.html

相关文章

  • 2023-7-26 Dynamic替代部分反射的简单实现方式
    Dynamic与反射的使用【作者】长生实体类publicclassSchool{ publicintGetAge(){ return100;}}使用反射获取对象里的方法 Schoolschool=newSchool(); varmethod=typeof(School).GetMethod("GetAge"); intage=(int)method.Invoke(school,null); Console.W......
  • 反射 p5 反射相关使用和暴破
    反射相关使用和暴破通过反射创建对象方式一:调用类中的public修饰的无参构造器;方式二:调用类中的指定构造器;Class类相关方法:newInstance():调用类中的无参构造器,获取对应类的对象;getConstructor(Class...clazz):根据参数列表,获取对应的public构造器对象;getDecalaredConstruct......
  • 2.反射
    反射调用类ioc反射调用方法MVCURL地址一般是类名称+方法名反射操作属性和方法反射操作属性字段ORM模型转换(有点意思)publicstaticvoidCoventClass<D>(Peoplep,refDd)whereD:new(){Typet1=d.GetType();//......
  • python取出文件包含特定字符串几行
    Python取出文件包含特定字符串的几行在日常的编程工作中,我们经常需要处理大量的文本文件。有时候,我们需要从这些文件中提取包含特定字符串的行。Python作为一门功能强大的编程语言,提供了多种方法来实现这个目标。本文将介绍如何使用Python来取出文件中包含特定字符串的行,并提供相......
  • 反射 p4 反射获取类的结构信息
    反射获取类的结构信息关于Class的APIgetName:获取全类名getSimpleName:获取简单类名getFields:获取所有Public修饰的属性,包含本类及其父类(不仅仅是直接父类)getDeclaredFields:获取本类中的所有属性,不包括父类getMethods:获取所有public修饰的方法,包含本类及其父类的(不仅仅是直......
  • 反射 p3 类加载
    类加载基本说明反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载。静态加载:编译时加载相关的类,如果没有则报错,依赖性太强。动态加载:运行时加载相关的类,如果运行时不用该类,即使不存在该类,也不会报错,降低了依赖性。代码演示:importjava.util.*;importjava......
  • GE反射内存卡的指标和型号
    产品特性:•1路发送,1路接收;•光纤高速网络2.12GHz;•最大256个节点;•光纤协议不占用CPU资源;•多模光纤节点距离300米;单模光纤节点距离10千米;•板载128M/256MByteSDRAM;•低延迟率(n秒级);•动态包长:每个包4到64或1M个字节。产品选型:1、CPCI接口-5565PIORC-110000(128MSDRAM多......
  • Java-Day-36( 通过反射获取类的结构信息 + 通过反射访问类中的成员 + 章节练习 )
    Java-Day-36通过反射获取类的结构信息第一组:java.lang.Class类以下说的包含本类和父类——也包括超类等方法属性之类的若是输出时不加.getName,则都是输出:com.zyz.Zyz()publicclasstest{publicstaticvoidmain(String[]args){}@Testpubl......
  • 编写高质量代码改善程序的157个建议:使用Dynamic来简化反射的实现
    概述最近在看《编写高质量代码改善C#程序的157个建议》。看到第15个建议的时候,结合平时使用的习惯发现有部分出入,没有对不对的说法,只是使用习惯有点区别,跟随着我们来看一看。第15条建议是:使用dynamic简化反射的使用。dynamic的确可以简化反射的使用,但是从性能上来说是有......
  • 编码技巧 --- 使用dynamic简化反射
    合集-c#基础(7) 1.编码技巧---如何实现字符串运算表达式的计算07-122.编码技巧---同步锁对象的选定07-133.解读---yield关键字07-174.并发编程---信号量线程同步07-185.并发编程---为何要线程池化07-186.编码技巧---谨防闭包陷阱07-197.编码技巧---使用dyn......