iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java怎么使用反射给对象属性赋值
  • 629
分享到

java怎么使用反射给对象属性赋值

2023-07-05 21:07:26 629人浏览 八月长安
摘要

本文小编为大家详细介绍“java怎么使用反射给对象属性赋值”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么使用反射给对象属性赋值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言最近项目中遇到一个问题

本文小编为大家详细介绍“java怎么使用反射给对象属性赋值”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么使用反射给对象属性赋值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

前言

最近项目中遇到一个问题,就是能实现一个类将以后的多语都进行转换的通用方法,根据这个需求,决定使用反射实现,根据反射给对象属性设置属性值,下面是使用反射实现对对象属性值进行设置的方法

方法1:这里使用了Field的set方的 Field 属性,然后设置可见性,然后设置了一个值,最后打印

// 给变量赋值 给object对象的某个字段赋值

f.set(object, value);

//拿到了Field类的实例后就可以调用其中的方法了

//方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值

package com.example.reflectiondemo; import java.lang.reflect.Field; public class ReflectMain {     private String readOnly;     public String getReadOnly() {        return readOnly;    }     public void setReadOnly(String readOnly) {        System.out.println("set");        this.readOnly = readOnly;    }     public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {        ReflectMain t = new ReflectMain();        Field f = t.getClass().getDeclaredField("readOnly");        f.setAccessible(true);        f.set(t, "test");        System.out.println(t.getReadOnly());     }}

方法2:使用invoke方法

package com.example.reflectiondemo; import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method; public class ReflectMain {     private String readOnly;     public String getReadOnly() {        return readOnly;    }     public void setReadOnly(String readOnly) {        System.out.println("set");        this.readOnly = readOnly;    }     //    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {//        ReflectMain t = new ReflectMain();//        Field f = t.getClass().getDeclaredField("readOnly");//        f.setAccessible(true);//        f.set(t, "test");//        System.out.println(t.getReadOnly());////    }    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {        ReflectMain t = new ReflectMain();        Method setReadOnly = t.getClass().getMethod("setReadOnly", String.class);        String s = "test2";        setReadOnly.invoke(t, s);        System.out.println(t.getReadOnly());     }}

java怎么使用反射给对象属性赋值

由此可见,使用反射我们能给很容易的给各个属性进行设置,即使是private的属性我们也能很轻松的设置属性值,下面利用这个demo例子,就设置了我们的最初的功能。

总结

也就是说,第一种方法,没有调用属性的set方法就完成了赋值,

但是第二种方法,是通过调用属性的set方法来完成赋值。

所以,如果想在程序中改变程序的属性的值的同时还想做一些额外的事情,可以将这些事情写到set方法中并使用第二种方法

public class MultiLanGContentUtil {         public static void setMultiLangDTOName(Object targetPO, Object targetDTO, String targetMultiName) {        try {             String locale = MultiLangContentUtil.getLocale();            Class<?> targetDTOClass = targetDTO.getClass();            Class<?> targetPOClass = targetPO.getClass();            //这里是将targetMultiName进行展示            Field declaredFieldDTO = targetDTOClass.getDeclaredField(targetMultiName);            declaredFieldDTO.setAccessible(true);            switch (locale) {                case ZH_CN:                    //获取PO的值                    Field declaredFieldPO = targetPOClass.getDeclaredField(targetMultiName);                    //获取DTO对象                    declaredFieldPO.setAccessible(true);                    //对DTO根据PO进行设置                    declaredFieldDTO.set(targetDTO, declaredFieldPO.get(targetPO));                    break;                case EN_US:                    //获取PO的值                    Field declaredFieldPO2 = targetPOClass.getDeclaredField(targetMultiName + 2);                    //获取DTO对象                    declaredFieldPO2.setAccessible(true);                    //对DTO根据PO进行设置                    declaredFieldDTO.set(targetDTO, declaredFieldPO2.get(targetPO));                    break;                case ZH_TW:                    //获取PO的值                    Field declaredFieldPO3 = targetPOClass.getDeclaredField(targetMultiName + 3);                    //获取DTO对象                    declaredFieldPO3.setAccessible(true);                    //对DTO根据PO进行设置                    declaredFieldDTO.set(targetDTO, declaredFieldPO3.get(targetPO));                    break;                default:                    break;            }            //防止没有抽取多语的情况下没有参照返回,默认情况下设置中文            if (StringUtils.isBlank((String) declaredFieldDTO.get(targetDTO))) {                //获取PO的值                Field declaredFieldPO = targetPOClass.getDeclaredField(targetMultiName);                //获取DTO对象                declaredFieldPO.setAccessible(true);                //对DTO根据PO进行设置                declaredFieldDTO.set(targetDTO, declaredFieldPO.get(targetPO));            }        } catch (NoSuchFieldException e) {            log.error("查询当前字段--->{}不存在{},", targetMultiName, e);        } catch (IllegalAccessException e) {            log.error("查询字段--->{}多语时发生非法状态异常{},", targetMultiName, e);        } catch (Exception e) {            log.error("查询字段{}多语时发生错误{},", targetMultiName, e);        } catch (Throwable throwable) {            log.error("查询多语言字段{}发生未知错误{}", targetMultiName, ThrowableUtil.stackTraceToString(throwable));        }    }         public static void updateMultiLang(Object targetDTO, Object targetPO, String fieldName, Integer MultiLangSize) {        try {            Class<?> targetDTOClass = targetDTO.getClass();            Class<?> targetPOClass = targetPO.getClass();             Field dtoClassField = targetDTOClass.getDeclaredField(fieldName);            dtoClassField.setAccessible(true);            if (StringUtils.isNotBlank((String) dtoClassField.get(targetDTO))) {                Field poClassField = targetPOClass.getDeclaredField(fieldName);                poClassField.setAccessible(true);                poClassField.set(targetPO, dtoClassField.get(targetDTO));            }            for (int i = 2; i <= MultiLangSize; i++) {                Field dtoClassField2 = targetDTOClass.getDeclaredField(fieldName + i);                dtoClassField2.setAccessible(true);                if (StringUtils.isNotBlank((String) dtoClassField2.get(targetDTO))) {                    Field poClassField2 = targetPOClass.getDeclaredField(fieldName + i);                    poClassField2.setAccessible(true);                    poClassField2.set(targetPO, dtoClassField2.get(targetDTO));                }            }        } catch (NoSuchFieldException e) {            log.error("更新当前字段--->{}不存在{},", fieldName, e);        } catch (IllegalAccessException e) {            log.error("更新字段--->{}多语时发生非法状态异常{},", fieldName, e);        } catch (Exception e) {            log.error("更新字段{}多语时发生错误{},", fieldName, e);        } catch (Throwable throwable) {            log.error("更新多语言字段{}发生未知错误{}", fieldName, ThrowableUtil.stackTraceToString(throwable));        }    }         public static final String getLocale() {        String locale = InvocationInfoProxy.getLocale();        return StringUtils.isEmpty(locale) ? "zh_CN" : locale;    }}

这个工具类的核心思想就是

  • 使用Field的get方法获取属性值

  • Field的set方法设置属性

// 给变量赋值 给object对象的某个字段赋值

f.set(object, value);

//拿到了Field类的实例后就可以调用其中的方法了

//方法:get(Object obj) 返回指定对象obj上此 Field 表示的字段的值

读到这里,这篇“java怎么使用反射给对象属性赋值”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: java怎么使用反射给对象属性赋值

本文链接: https://www.lsjlt.com/news/355428.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java使用反射给对象属性赋值
    📢 📢 📢 📣 📣 📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步...
    99+
    2023-09-02
    java 反射 Powered by 金山文档
  • java怎么使用反射给对象属性赋值
    本文小编为大家详细介绍“java怎么使用反射给对象属性赋值”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么使用反射给对象属性赋值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言最近项目中遇到一个问题...
    99+
    2023-07-05
  • java反射给对象属性赋值怎么实现
    Java反射可以通过`java.lang.reflect.Field`类来给对象的属性赋值。以下是一个示例代码: import ja...
    99+
    2023-10-27
    java
  • java使用反射给对象属性赋值的两种方法
    目录前言方法1:这里使用了Field的set方的 Field 属性,然后设置可见性,然后设置了一个值,最后打印方法2:使用invoke方法总结:前言 最近项目中遇到一个问题,就是能实...
    99+
    2023-05-14
    java用反射给属性赋值 java反射设置属性的值 java 反射属性
  • 怎么使用java反射获取对象属性值
    使用Java反射获取对象属性值的步骤如下:1. 获取对象的Class对象,可以通过对象的getClass()方法获取。```java...
    99+
    2023-09-26
    java
  • java在创建对象时怎么给属性赋值
    在Java中,可以通过以下几种方式给对象的属性赋值:1. 使用构造方法:在创建对象时,通过传递参数给构造方法来赋值。例如:javap...
    99+
    2023-10-18
    java
  • Java 反射设置/获取对象属性值
    ✨大家好,我是【zhuzicc】~ ,一位主攻【Java】的 攻城狮!✨ 欢迎对【Java】感兴趣的大佬,关注我 😜 ———————————————— ❤️ ❤️ ❤️ 如果觉得...
    99+
    2023-10-20
    java jvm servlet
  • java中给实体对象属性的空值赋默认值
    目录给实体对象属性的空值赋默认值给实体类赋默认值通用方法给实体对象属性的空值赋默认值 private final String defaultStr = ""; private fi...
    99+
    2024-04-02
  • Java 用反射设置对象的属性值实例详解
    Java 用反射设置对象的属性值实例详解private Object invoke(Object obj, String fieldName, Object value) { String firstWord = fieldName.su...
    99+
    2023-05-31
    java 反射 对象
  • 怎么用java反射给属性加注解
    在Java中,无法直接使用反射给属性添加注解。注解只能在编译期间被处理,而反射是在运行时动态获取和操作类的信息。因此,无法通过反射来...
    99+
    2023-10-22
    java
  • java怎么用构造方法给属性赋值
    在Java中,构造方法可以用来给属性赋值。构造方法是一个特殊的方法,它与类名相同,并且没有返回类型(包括void),用来创建对象时初...
    99+
    2023-10-18
    java
  • java里面给对象赋值,慎用赋值符号(=) (转)
    java里面给对象赋值,慎用赋值符号(=) (转)[@more@]对于对象来说,注意变量名类似于指针,所以请慎用赋值符号(=)!比如下面的代码:  ArrayList alAll = new ArrayList();  ...
    99+
    2023-06-03
  • 怎么使用java反射获取属性
    要使用Java反射获取属性,可以按照以下步骤进行:1. 获取要操作的类的Class对象:```javaClass clazz = Y...
    99+
    2023-09-04
    java
  • java中怎么用构造方法给属性赋值
    在Java中,可以使用构造方法给属性赋值。构造方法是一个特殊的方法,用于创建对象时初始化对象的属性。构造方法的定义格式如下:```javapublic 类名(参数列表) {// 构造方法的方法体// 给属性赋值的代码}```在构造方法中...
    99+
    2023-08-11
    java
  • java 对象List中对象的某一属性重新赋值
    描述: 在我们开发过程中经常会遇到在拿到一个对象list集合的时候回对某一个字段重新赋值,比如:在无任务下面的若干子任务,开始执行主任务对子任务的状态统一设置待执行。这个时候就需要使用 Java8 s...
    99+
    2023-09-01
    java
  • Java反射怎么获取字段属性值
    今天小编给大家分享一下Java反射怎么获取字段属性值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Java反射获取字段属性值...
    99+
    2023-07-02
  • MyBatis拦截器:给参数对象属性赋值的实例
    该拦截器的作用:在进行增加、修改等操作时,给数据模型的一些通用操作属性(如:创建人、创建时间、修改人、修改时间等)自动赋值。该实现是在DAO层拦截,即存入DB前最后一层。后经分析,不是很合理,改为在service层拦截,用spring AO...
    99+
    2023-05-31
    mybatis 拦截器 参数
  • vue怎么循环给对象赋值
    这篇文章主要介绍“vue怎么循环给对象赋值”,在日常操作中,相信很多人在vue怎么循环给对象赋值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么循环给对象赋值”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-30
  • java中怎么通过反射获取属性值
    在Java中,可以通过反射来获取属性的值。下面是一个示例代码:```javaimport java.lang.reflect.Fie...
    99+
    2023-09-07
    java
  • 怎么用java反射获取对象
    这篇“怎么用java反射获取对象”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用java反射获取对象”文章吧。本教程操作...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作