-
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对象属性赋值吗_Java对象之间的属性赋值
2021-02-26 09:32:57对象之间的属性赋值主要通过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);
}
}
-
java两个对象赋值_一起学Java(二十六)----- 对象之间赋值
2021-03-06 18:51:50Java语言基础Java对象之间赋值赋值是用等号运算符“ = ”进行的,在对对象进行“赋值”时,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“A = B”,那么A和B最终都会指向最初只有B才指向的...不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java对象之间赋值
赋值是用等号运算符“ = ”进行的,在对对象进行“赋值”时,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“A = B”,那么A和B最终都会指向最初只有B才指向的那个对象。也就是说这个时候他们两个引用了同一块内存地址.
class Number{
int i;
}
public class Test {
public static void main(String[] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 1;
n2.i = 2;
System.out.println("n1.i:" + n1.i);
System.out.println("n2.i:" + n2.i);
n2 = n1;
System.out.println(n1.equals(n2));
System.out.println(n1 == n2);
System.out.println("n1.i:" + n1.i);
System.out.println("n2.i:" + n2.i);
n1.i = 3;
System.out.println("n1.i:" + n1.i);
System.out.println("n2.i:" + n2.i);
}
}
程序输出:
n1.i:1
n2.i:2
true
true
n1.i:1
n2.i:1
n1.i:3
n2.i:3
看来改变n1(n1.i = 3)的同时也改变了n2!这是由于无论n1还是n2都包含了相同的句柄,它指向相同的对象(最初的句柄位于n2内部,指向容纳了值1的一个对象。在赋值过程中,那个句柄实际已经丢失;它的对象会由“垃圾收集器”自动清除)。
注意:
class Number{
int i;
}
public class Test {
public static void main(String[] args) {
Number n1 = new Number();
Number other = (Number)n1;
System.out.println(other == n1);
System.out.println(other);
System.out.println(n1);
}
}
程序输出:
true
Hello.Number@15db9742
Hello.Number@15db9742
-
java属性赋值_Java对象之间的属性赋值
2021-02-12 13:37:52对象之间的属性赋值主要通过org.springframework.beans.BeanUtils.copyProperties方法进行对象之间的属性赋值。赋值前提 -- 两个对象要赋值的属性名需要保持一致对象赋值# 将source对象赋值给target对象BeanUtils.... -
java 对象引用 赋值_java对象引用,对象赋值
2021-03-09 16:00:56关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面... -
java 对象的赋值_JAVA 对象引用,以及对象赋值
2021-03-07 07:33:44本文转自:http://zwmf.iteye.com/blog/1738574关键字: java对象 引用Java对象及其引用关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把... -
java 对象引用 赋值_JAVA 对象引用,以及对象赋值
2021-03-09 16:00:00关键字: java对象 引用Java对象及其引用关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清... -
java 对象引用 赋值
2020-09-22 19:18:50Java对象及其引用 关于对象与引用之间的一些基本概念。 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用, 那... -
java对象赋值_Java对象引用和对象赋值
2021-02-12 09:21:27关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,那实在没法很好地理解下面... -
java 对象赋值_JAVA 对象引用,以及对象赋值
2021-02-12 09:20:58关键字: java对象 引用Java对象及其引用关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清... -
java对象赋值的方法_JAVA 对象引用,以及对象赋值
2021-03-04 05:57:02关键字: java对象 引用Java对象及其引用关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清... -
java 对象赋值_JAVA 对象引用,以及对象赋值(转)
2021-02-28 14:31:06原文链接:http://zwmf.iteye.com/blog/1738574关键字: java对象 引用Java对象及其引用关于对象与引用之间的一些基本概念。初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把... -
Java对象之间相同属性的赋值
2020-10-09 16:17:27要把其中一个对象的一些属性赋值给另一个对象。 最原始的方式是依次调用两个对象的set和get方法,挨个赋值。 但是spring提供了BanUtils的方法copyPrpperties可以实现。 注: 博客:... -
java 对象赋值
2016-11-30 23:05:20在进行java工程开发时,偶尔会遇到对象之间的赋值,如果只是简单的等号赋值,那么 两个对象将共用一段内存,修改其中一个,另一个也会随之变化。那么怎样进行简单的赋值才能够互相不受干扰。 @Override public ... -
java 反射 hold_通过反射,给对象之间赋值
2021-03-09 07:52:47/*** 通过反射,给对象赋值* add by wangHao 2014-01-08* @param source* @param dest* @throws Exception*/public void CopyObject(Object source,Object dest)throws Exception {BeanInfo sourceBean = ... -
JAVA List对象之间的赋值问题
2019-10-15 10:52:02若需将list对象的值赋值给list2 List<String> list2 = list; 这种写法并没有创建新的List对象,实质上list2和list的对象内存地址相同,此操作是将list2的地址指向list的地址,共用同一内存,只要其中... -
java 相同属性_java对象之间相同属性名赋值
2021-02-12 21:20:59/*** @Title: EntityObjectConverter.java* @Package com.joyce.util* @Copyright: Copyright (c) 2013** @author Comsys-LZP* @date 2013-11-4 上午09:55:14* @version V2.0*/package ...import java.uti... -
Java 对象之间相同属性的赋值
2018-09-06 15:03:311.BeanUtils.copyProperties import org.springframework.beans.BeanUtils; User src = new User(); User dest = new User(); BeanUtils.copyProperties(dest, src);...项目应用场景:将具有相同属性的ProductVO 转为... -
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 * @... -
java对象的引用和对象的赋值
2016-08-23 14:23:36Java对象及引用Java对象及其引用关于对象与引用之间的一些基本概念: 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与... -
java 对象引用 及 对象赋值
2018-07-27 13:58:25关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念。 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分... -
Java中对象之间的赋值问题
2019-08-25 00:10:04开篇第一句,还是那句老话: 先学会走,再想着跑. ...我们直接把 bingXiang 赋值给了 bingXiang2 所以两个对象中存储着相同的地 址,都是58. 从图中可以清楚的看出两个对象引用了同一块内存地址. -
JAVA 对象引用&对象赋值
2017-12-20 16:25:27关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念。 初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不... -
java两个对象之间能赋值吗_如何使用BeanUtils.copyProperties进行对象之间的属性赋值...
2021-03-08 22:12:581、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值/*** 对象属性拷贝 * 将源对象的属性拷贝到目标对象** @param source 源对象* @... -
别名现象,java对象之间的相互赋值
2015-04-17 14:58:00import java.util.*; class book{ static int c = null; } public static void main(String[] args){ Book book1 = new book(); Book book2 = new book(); book1.c = 6; book2.c = 4; ...