精华内容
下载资源
问答
  • java对象之间赋值

    2020-12-20 10:41:45
    第一种:使用org.apache.commons.beanutils....2.PropertyUtils有自动类型转换功能,而java.util.Date恰恰是其不支持的类型 3.PropertyUtils支持为null的场景; public static void copyProperties(Object dest, Ob

    第一种:使用org.apache.commons.beanutils.PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean。

    特点:

    1.它的性能问题相当差

    2.PropertyUtils有自动类型转换功能,而java.util.Date恰恰是其不支持的类型

    3.PropertyUtils支持为null的场景;

    public static void copyProperties(Object dest, Object orig) {
    try {
     PropertyUtils.copyProperties(dest, orig);
    } catch (IllegalAccessException | InvocationTargetException
    throw new IllegalArgumentException(e);
    | NoSuchMethodException e) { }
    }
    

    第二种:使用BeanUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean。

    特点:

    1.BeanUtils速度相对快一些

    2.BeanUtils没有自动转换功能,遇到参数名相同,类型不同的参数不会进行赋值。

    3.BeanUtils对部分属性不支持null的情况,Ineger、Boolean、Long等不支持。

    public static void copyProperties(Object dest, Object orig) {
    try {
     BeanUtils.copyProperties(dest, orig);
    } catch (IllegalAccessException | InvocationTargetException e) {
    throw new IllegalArgumentException(e);
    }
    }
    

    第三种:将java对象转换为json,然后将JSON转换成Java对象。注意属性名要相同—采取com.fasterxml.jackson.databind.ObjectMapper的方法

    特点:

    1.属性名一致就可以转换

    2.效率及异常还未验证

    private static final ObjectMapper MAPPER = new ObjectMapper();
    String jsonStr = MAPPER.writeValueAsString(obj);
    RabbitMQDataDto detail = MAPPER.readValue(jsonStr , RabbitMQDataDto.class);
    

    第四种:将java对象转换为json,然后将JSON转换成Java对象。注意属性名要相同—采取com.alibaba.fastjson.JSON

    特点:

    1.需要拷贝的两个对象里面都包含有另一个对象,但是另一个对象里面属性相同但是对象名不同;

    采用json来转换只要属性名一致即可

    InsurePersonInfoDto applicantInfo = insureRelevantPersonInfoDto.getApplicantInfo();
    ThirdPartInsurePersonInfo thirdPartApplicantInfo = JSON.parseObject(JSON.toJSONString(applicantInfo), new TypeReference<ThirdPartInsurePersonInfo>() {});
    

    第五种Dozer

    1、Dozer是什么?
    dozer是一个能把实体和实体之间进行转换的工具.只要建立好映射关系.就像是ORM的数据库和实体映射一样.

    使用方法示例如下:

    // article(PO) -> articleVO
    ArticleVO articleVO = dozerMapper.map(article, ArticleVO.class);
    

    这段示例代码。将从数据库里面查询得到的PO对象article,转换为VO对象articleVO,转换过程将所有同名同类型的数据自动赋值给articleVO的成员变量,当然除了reader(因为PO里面没有reader数组数据)。转换需要写属性之间的映射么?不! 默认是根据属性名称来匹配的.

    2、使用Dozer进行实体类的转换:

    首先引入依赖

     <dependency>
      <groupId>net.sf.dozer</groupId>
      <artifactId>dozer</artifactId>
      <version>5.4.0</version>
     </dependency>
    

    注入一个工具类DozerBeanMapper 到上下文中,

     @Configuration
     public class DozerBeanMapperConfigure {
      @Bean
      public DozerBeanMapper mapper() {
       DozerBeanMapper mapper = new DozerBeanMapper();
       return mapper;
      }
     }
    

    注入然后开始使用

    @Autowired
    protected Mapper dozerMapper;
    

    在实际应用中,我们不只需要PO转VO,有时还需要List转List.写一个工具类,实现List转List

    public class DozerUtils {
    
     static DozerBeanMapper dozerBeanMapper = new DozerBeanMapper();
    
     public static <T> List<T> mapList(Collection sourceList, Class<T> destinationClass){
      List destinationList = Lists.newArrayList();
      for (Iterator i$ = sourceList.iterator(); i$.hasNext();){
       Object sourceObject = i$.next();
       Object destinationObject = dozerBeanMapper.map(sourceObject, destinationClass);
       destinationList.add(destinationObject);
      }
      return destinationList;
     }
    }
    

    转自:https://www.jb51.net/article/193804.htm
    Dozer可以参考http://dozer.sourceforge.net/documentation/springintegration.html

    展开全文
  • java对象之间赋值详解

    万次阅读 2016-03-29 15:47:32
    赋值是用等号运算符(=)进行的。它的意思是“取得右边的值,把它复制到左边”。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一...

             赋值是用等号运算符(=)进行的。它的意思是“取得右边的值,把它复制到左边”。右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、已命名的变量。也就是说,它必须有一个物理性的空间来保存右边的值。举个例子来说,可将一个常数赋给一个变量(A=4;),但不可将任何东西赋给一个常数(比如不能4=A)。

            对主数据类型的赋值是非常直接的。由于主类型容纳了实际的值,而且并非指向一个对象的句柄,所以在为其赋值的时候,可将来自一个地方的内容复制到另一个地方。例如,假设为主类型使用“A=B,那么B处的内容就复制到A。若接着又修改了A,那么B根本不会受这种修改的影响。作为一名程序员,这应成为自己的常识。

    但在为对象“赋值”的时候,情况却发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D,那么C和D最终都会指向最初只有D才指向的那个对象。下面这个例子将向大家阐示这一点。

     

    下面是例子:

    </pre><pre name="code" class="java">class Number {
      int i;
    }
    
    public class Assignment {
      public static void main(String[] args) {
        Number n1 = new Number();
        Number n2 = new Number();
        n1.i = 9;
        n2.i = 47;
        System.out.println("1: n1.i: " + n1.i +
          ", n2.i: " + n2.i);
        n1 = n2;
        System.out.println("2: n1.i: " + n1.i +
          ", n2.i: " + n2.i);
        n1.i = 27;
        System.out.println("3: n1.i: " + n1.i +
          ", n2.i: " + n2.i);
      }
    }

             Number类非常简单,它的两个实例(n1和n2)是在main()里创建的。每个Number中的i值都赋予了一个不同的值。随后,将n2赋给n1,而且n1发生改变。在许多程序设计语言中,我们都希望n1和n2任何时候都相互独立。但由于我们已赋予了一个句柄,所以下面才是真实的输出:

    1: n1.i: 9, n2.i: 47

    2: n1.i: 47, n2.i: 47

    3: n1.i: 27, n2.i: 27

             看来改变n1的同时也改变了n2!这是由于无论n1还是n2都包含了相同的句柄,它指向相同的对象(最初的句柄位于n1内部,指向容纳了值9的一个对象。在赋值过程中,那个句柄实际已经丢失;它的对象会由“垃圾收集器”自动清除)。

             这种特殊的现象通常也叫作“别名”,是Java操作对象的一种基本方式。但假若不愿意在这种情况下出现别名,又该怎么操作呢?可放弃赋值,并写入下述代码:

    n1.i = n2.i;

               这样便可保留两个独立的对象,而不是将n1和n2绑定到相同的对象。但您很快就会意识到,这样做会使对象内部的字段处理发生混乱,并与标准的面向对象设计准则相悖。

    展开全文
  • Java对象之间赋值问题

    千次阅读 2019-08-25 00:10:04
    开篇第一句,还是那句老话: 先学会走,再想着跑. ...我们直接把 bingXiang 赋值给了 bingXiang2 所以两个对象中存储着相同的地 址,都是58. 从图中可以清楚的看出两个对象引用了同一块内存地址.

    开篇第一句,还是那句老话: 先学会走,再想着跑.

    首先我们假设: 有一个冰箱的类,并且冰箱类中有一个冰箱品牌的 (brand) 成员

    变量.考虑到冰箱的英文很长,有很多人并不认识,以下我会使用 bingxiang 来叙述.

    BingXing bingXing = new BingXIng();
    bingXiang.brand="海尔";
    BingXing bingXiang2=bingXiang; 
    

    对于 bingXiang2 我并没有 new 生成一个新的对象,而是把 bingXiang 直接赋给

    了它,这时候大家要注意,如果是引用类型的赋值的话,是把 bingxiang 的内存地

    址赋给了bingXiang2, 也就是说这个时候他们两个引用了同一块内存地址.

    System.out.println(bingXiang.brand);
    System.out.println(bingXiang2.brand);
    

    输出结果为:

    海尔
    海尔
    

    现在我们修改 bingXiang2 的种类,再看输出结果

    bingXiang.brand2="美的";
    System.out.println(bingXiang.brand);
    System.out.println(bingXiang2.brand);
    

    输出结果为:

    美的
    美的
    

    同过这两个例子我们可以很清楚的发现他们两个 确实引用了同一块内存地址.

    接下来我在为大家画一张内存的分布图,让大家更好的理解:
    在这里插入图片描述
    我们直接把 bingXiang 赋值给了 bingXiang2 所以两个对象中存储着相同的地

    址,都是58. 从图中可以清楚的看出两个对象引用了同一块内存地址.

    展开全文
  • 今天小编就为大家分享一篇关于Java实现不同的类的属性之间相互赋值,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 对象之间的属性赋值主要通过org.springframework.beans.BeanUtils.copyProperties方法进行对象之间的属性赋值赋值前提 -- 两个对象要赋值的属性名需要保持一致对象赋值# 将source对象赋值给target对象BeanUtils....

    对象之间的属性赋值

    主要通过org.springframework.beans.BeanUtils.copyProperties方法进行对象之间的属性赋值。

    赋值前提 -- 两个对象要赋值的属性名需要保持一致

    对象赋值

    # 将source对象赋值给target对象

    BeanUtils.copyProperties(source, target);

    List之间的对象赋值

    /**

    * @param input 输入集合

    * @param clazz 输出集合类型

    * @param 输入集合类型

    * @param 输出集合类型

    * @return 返回集合

    */

    public static List convertListToList(List input, Class clazz) {

    List output = Lists.newArrayList();

    if (CollectionUtils.isNotEmpty(input)) {

    for (E source : input) {

    T target = BeanUtils.instantiate(clazz);

    BeanUtils.copyProperties(source, target);

    output.add(target);

    }

    }

    return output;

    }

    示例

    有以下三个类,User、Cust、Student:

    @Data

    public class User {

    private String name;

    private String password;

    private String email;

    }

    @Data

    public class Cust {

    private String name;

    private String password;

    private String email;

    private String phone;

    }

    @Data

    public class Student {

    private String name;

    private String password;

    }

    工具类:

    import com.google.common.collect.Lists;

    import org.apache.commons.collections.CollectionUtils;

    import org.springframework.beans.BeanUtils;

    import java.util.List;

    /**

    * @Description: 对象之间进行赋值

    * @Date: 2020/9/25 9:55

    */

    public class AssignmentObject {

    /**

    * 对象属性拷贝

    * 将源对象的属性拷贝到目标对象

    * @param source 源对象

    * @param target 目标对象

    */

    public static void copyProperties(Object source, Object target) {

    BeanUtils.copyProperties(source, target);

    }

    /**

    * @param input 输入集合

    * @param clazz 输出集合类型

    * @param 输入集合类型

    * @param 输出集合类型

    * @return 返回集合

    */

    public static List convertListToList(List input, Class clazz) {

    List output = Lists.newArrayList();

    if (CollectionUtils.isNotEmpty(input)) {

    for (E source : input) {

    T target = BeanUtils.instantiate(clazz);

    BeanUtils.copyProperties(source, target);

    output.add(target);

    }

    }

    return output;

    }

    }

    测试类:分别测试对象之间的属性赋值与List之间的属性赋值

    public class Demo {

    public static void main(String[] args) {

    User user = new User();

    user.setName("admin");

    user.setPassword("admin");

    user.setEmail("123@qq.com");

    System.out.println("user:" + user);

    // 将user的属性分别赋给cust和student

    Cust cust = new Cust();

    AssignmentObject.copyProperties(user, cust);

    System.out.println("cust:" + cust);

    Student student = new Student();

    AssignmentObject.copyProperties(user, student);

    System.out.println("student:" + student);

    User user1 = new User();

    user1.setName("demo");

    user1.setPassword("demo");

    user1.setEmail("demo@qq.com");

    System.out.println("user1:" + user);

    // 将users赋值给List和List

    List users = new ArrayList<>();

    users.add(user);

    users.add(user1);

    System.out.println("users:" + users);

    List custs = AssignmentObject.convertListToList(users, Cust.class);

    System.out.println("custs:" + custs);

    List students = AssignmentObject.convertListToList(users, Student.class);

    System.out.println("students:" + students);

    }

    }

    展开全文
  • 要把其中一个对象的一些属性赋值给另一个对象。 最原始的方式是依次调用两个对象的set和get方法,挨个赋值。 但是spring提供了BanUtils的方法copyPrpperties可以实现。 注: 博客:...
  • Java 对象之间相同属性的赋值

    万次阅读 2017-11-13 16:00:21
    参考文章1.BeanUtils.copyPropertiesimport org.springframework.beans.BeanUtils; User src = new User(); User dest = new User(); BeanUtils.copyProperties(dest, src);可以进行类型转换2.PropertyUtils....
  • Java对象赋值与引用

    万次阅读 多人点赞 2017-07-28 19:52:34
    Java对象赋值与引用详解
  • Java Object对象之间相互转化赋值

    千次阅读 2020-03-12 10:17:46
    // 将Object1转化成字符串 String objectString = JSONObject.toJSONString(Object1);... Object1 和Object2 如果有相同的字段,则Object1的字段值就会复制给Object2中相同的字段中,Object1对象里面的值依然存在。
  • 1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值/*** 对象属性拷贝 * 将源对象的属性拷贝到目标对象** @param source 源对象* @...
  • Java对象不使用时赋值null的意义详解

    千次阅读 2021-02-25 18:54:57
    } } 再次运行程序,查看gc日志 由以上载图日志可以明显看到二者差别,所以不用对象置为null还是很有意义的。 为啥会造成二者的区别呢? 这还得从jvm认定垃圾的机制:可达性分析说起。 说起这个可达性,首先就得说到...
  • java对象赋值、深拷贝与浅拷贝

    千次阅读 2020-10-09 17:46:43
    Java 应用当中将一个对象的值给到一个新的对象可以通过直接赋值和拷贝的方式进行,但两种方式我们应该清除他们之间的区别; 直接赋值(引用赋值) 定义一个对象 public class User { private String name; ...
  • 对自严格件要求较然条,对象等号当于不属物的下列于经济作是(,对象等号当于化生宜于专门集中进行产,物定经途的有某农作指具种特济用,地域性强品率通常特点作物值高经济具有、经济价、技求高高等术要、商,包括物...
  • JAVA List对象之间赋值问题

    千次阅读 2019-10-15 10:52:02
    若需将list对象的值赋值给list2 List<String> list2 = list; 这种写法并没有创建新的List对象,实质上list2和list的对象内存地址相同,此操作是将list2的地址指向list的地址,共用同一内存,只要其中...
  • 两个对象拥有相同的字段,这两个可以通过拷贝互相给另一个对象进行赋值。通过使用下面两个工具类可以实现该功能。 使用方法如上,DbzAecopdVoEntity和DbzAecopd1Entity具有相同的属性,通过BeanUtils....
  • java不同对象属性赋值

    千次阅读 2017-08-29 21:18:45
    将JSONObject中的值赋值给类中和key同名的属性
  • java对象之间相同属性名赋值

    千次阅读 2017-09-19 14:09:00
    * @Description: 两个对象之间相同属性名的属性值复制 * * @Title: EntityObjectConverter.java * @Copyright: Copyright (c) 2013 * * @author Comsys-LZP * @date 2013-11-4 下午02:33:56 * @...
  • 将source中与target中类型和名称相同的属性值赋值给对应的entity的属性。
  • JAVA对象赋值与引用

    万次阅读 2016-08-23 16:41:48
    前言最近在学习红黑树,当我尝试不使用递归来实现时,发现自己的...@Intopass的知乎回答 java到底是值传递还是引用传递 @focusChen的博客 JAVA 对象引用,以及对象赋值 一番折腾先找个对象过年class Node { int value;
  • 浅谈java对象之间相互转化的多种方式,对象,属性,参数,赋值,不支持浅谈java对象之间相互转化的多种方式易采站长站,站长之家为您整理了浅谈java对象之间相互转化的多种方式的相关内容。第一种:使用org.apache....
  • 浅谈java对象引用及对象赋值

    千次阅读 多人点赞 2017-01-05 15:11:46
    一、Java对象及其引用  初学Java,总是会自觉或不自觉地把Java和C++相比较。在学习Java类与对象章节的时候,发现教科书和许多参考书把对象和对象的引用混为一谈。可是,如果分不清对象与对象引用, 那实在没法很...
  • Java对象之间不能直接用“=”赋值

    千次阅读 2019-07-29 15:49:24
    对象之间使用“=”是将引用所指地址进行赋值,而不是内存块的内容。 比如两个集合之间的赋值: List list1 = new ArrayList(); List list2 = new ArrayList(); String url1 = "1"; String url2 = "2"; l...
  • 1.将Java对象转换成Map的键值对形式 上代码 /** * 获取利用反射获取类里面的值和名称 * * @param obj * @return * @throws IllegalAccessException */ public static Map<String, Object> object...
  • java map赋值报错

    2021-03-15 19:04:54
    Map headers = new HashMap();headers=new unitting().headers();...import java.util.HashMap;import java.util.Map;public class unitting {public long khronos = ((int) (System.currentTimeMillis()...
  • java给数组赋值

    2021-03-23 20:12:06
    java 动态数组赋值,java对象数组详解,java二维数组赋值,java给数组赋值java数组动态赋值,从零学java笔录-第24篇 图解一维数组在内存中,java二维数组赋值,java给数组赋值java 数组动态赋值,从零学java笔录-第24篇 ...
  • 关于对象之间相互赋值的问题

    千次阅读 2018-08-15 16:18:22
    介绍:我在往recyclerView适配器中传入对象的问题 背景:mvp+Retrofit和RxJava。 引言:这是一个java基础级的错误,这个问题涉及了一点内存机制,veryEasy 首先看看怎么个“犯错思路” ——以下为简化过的代码—— ...
  • 主要介绍了利用Java反射机制实现对象相同字段的复制操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • java 对象赋值

    2016-11-30 23:05:20
    在进行java工程开发时,偶尔会遇到对象之间赋值,如果只是简单的等号赋值,那么 两个对象将共用一段内存,修改其中一个,另一个也会随之变化。那么怎样进行简单的赋值才能够互相不受干扰。 @Override public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,831
精华内容 92,332
关键字:

java对象之间赋值

java 订阅