-
2019-03-12 12:09:18
java 对象的属性赋值时,提示NoSuchMethodException,一般来说,对象的get,set方法不会报这样的错误。
所以,当出现这个问题的时候,需要检查对象生成的时候构建的属性中是否存在该属性。防止class文件长时间没更新,版本太老导致的问题。跟踪对象构建过程中的属性情况
更多相关内容 -
Java对象之间的属性赋值
2021-02-12 13:37:52对象之间的属性赋值主要通过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中为实体对象的动态属性赋值
2021-02-12 13:37:52例如: User 对象中有100个属性,从jsp页面传过来的参数对应了其中的某一个属性,根据User中的set方法为具体的属性赋值。怎么样根据set方法或者其他的方法为对应的不确定的属性赋值!public class User{private ...例如: User 对象中有100个属性,从jsp页面传过来的参数对应了其中的某一个属性,根据User中的set方法为具体的属性赋值。
怎么样根据set方法或者其他的方法为对应的不确定的属性赋值!
public class User{
private String field1;
private String field2;
private String field3;
private String field4;
private String field5;
private String field6;
private String field7;
private String field8;
private String field9;
private String field10;
private String field11;
private String field12;
private String field13;
private String field14;
private String field15;
private String field16;
private String field17;
private String field18;
private String field19;
private String field20;
..//get、set方法省略
}
String param = request.getParameter(" field ? ");
其中? 根据json返回的数据自动生成的文本框,获取到的属性名称,对应了User中的具体某个属性。比如:?为1,则获取到field1 的值,然后将其赋值给User。
如何解决以上,为User多个属性动态赋值。
-
java对象之间赋值
2020-12-20 10:41:45第一种:使用org.apache.commons.beanutils.PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean。 特点: 1.它的性能问题相当差 2.PropertyUtils有自动...第一种:使用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中对象给对象赋值
2021-03-16 20:02:44java中对象给对象赋值 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行... -
Java实现不同的类的属性之间相互赋值
2020-08-26 04:44:46今天小编就为大家分享一篇关于Java实现不同的类的属性之间相互赋值,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
java获取对象所有属性并给属性赋值
2021-03-04 04:58:53packagetest;importsun.rmi.runtime....importjava.lang.reflect.Field;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Locale;/*** Created by Admi... -
java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
2022-02-12 11:15:38import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(源对象, 目标对象); -
浅谈Java之属性赋值的先后顺序
2021-12-02 09:19:14Java一个类可以包含有:属性(成员变量),构造器, 方法(或者叫函数), 代码块(程序段),内部类。那么结合这些,我们就有了对属性可赋值的位置: > 1):默认初始化 > 2):显示初始化 > 3):构造器中赋值 > 4... -
java :给Java实体对象或泛型类属性赋值
2021-12-14 09:37:441、需要依赖commons-beanutils... //给泛型对象赋值 BeanUtils.setProperty(test, "name", "tests"); System.out.println("fsdf = " + test.getName()); } } 运行main函数输出结果 注意:其中CJjTest可以是泛型对象。 -
java使用反射给对象属性赋值的两种方法
2018-11-29 14:20:07java反射无所不能,辣么,怎么通过反射设置一个属性的值呢? 主程序: /** * @author tengqingya * @create 2017-03-05 15:54 */ public class TestReflectSet { private String readOnly; public ... -
Java父子对象属性赋值问题:使用Spring的BeanUtils将父类对象的属性赋值给子类,Java如何将父类对象属性值...
2020-09-18 19:22:23Java父子对象属性赋值问题:现有父类Father类,子类Son类继承于Father类,现要求将父类对象的属性值全部赋予给子类,如果通过子类对象.set(父类对象.get属性),那势必相当麻烦。 那么,有没有更加方便的API呢?... -
JAVA反射给属性赋值
2021-02-27 10:55:26开始理解起来可能比较费劲,但我们可以通过一个通俗说明来这样理解AOPJAVA反射——给属性赋值使用反射的机制来给私有的属性赋值,这个原理在许多ORM的组件中都有应用,下面是一段掩饰代码pub... -
java通过反射遍历对象得到属性\反射赋值
2021-04-17 07:30:36import lombok.Data;import java.lang.reflect.Field;import java.lang.reflect.Method;@Datapublic class MyFK {String name.../*** 通过反射遍历对象得到对象的值* @param myFK* @throws Exception*/public void t... -
java-使用反射给属性赋值(适用于多对象共用一个处理参数的方法)
2021-11-28 21:09:55反射给属性赋值 -
java不同对象属性赋值
2017-08-29 21:18:45将JSONObject中的值赋值给类中和key同名的属性 -
java给对象赋值的方式
2021-02-12 09:20:54对于private修饰的属性不能直接使用只能间接作用2.setter和getter方法给外部一个set方法通过这个方法间接给对象赋值,可以对外部给的值进行控制给外部一个get方法访问某个变量的值注意:建议将se... -
Java 使用反射给属性赋值
2022-04-25 18:10:11Java 使用反射给属性赋值 package com.nf147.manage.spring; import java.lang.reflect.Field; public class Cat { private String name; @Override public String toString() { return "Cat{" + "name=... -
Java对象之间相同属性的赋值
2020-10-09 16:17:27要把其中一个对象的一些属性赋值给另一个对象。 最原始的方式是依次调用两个对象的set和get方法,挨个赋值。 但是spring提供了BanUtils的方法copyPrpperties可以实现。 注: 博客:... -
java bean对象属性复制,将一个对象的属性值赋值给另一个对象,对象之间的复制方法
2020-12-08 09:42:19注意依赖,springframework下的复制顺序为 (目标对象,新对象) import org.springframework.beans.BeanUtils; public static void main(String[] args) { InterfaceCaseDO oldInterfaceCase = new InterfaceCaseDO... -
java 父类对象属性值赋值给子类对象
2021-05-10 11:40:35父类对象属性值赋值给子类对象 org.springframework.beans.BeanUtils.copyProperties(父类对象,子类对象); -
把一个对象的属性赋值给另一个对象且忽略null值(属性名要相同)
2020-12-31 10:06:05在遇到需要将一个对象的部分属性值赋值(copy)给另外一个对象时,BeanUtils.copyProperties(source,target) 可以非常方便的为我们解决这个问题(注意:BeanUtils是org.springframework.beans包下的)。其中source参数... -
java 属性赋值顺序
2020-10-18 22:22:55属性赋值顺序 1.1属性赋值的方式 ① 默认初始化 ② 显式初始化 ③ 构造器中初始化 ④ 通过"对象.方法" 或 "对象.属性"的方式,赋值 1.2 各种赋值方式的代码 ① 默认初始化(声明变量时系统默认的值) class Person{ ... -
Java通过反射机制动态设置对象属性值的方法
2020-09-01 23:39:05下面小编就为大家带来一篇Java通过反射机制动态设置对象属性值的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Java中给成员变量(属性)赋值三种方式详解
2020-04-21 15:14:32Java中给属性设置值有三种方式: 通过set()方法(对于一个类中的成员变量(属性),如果都被设置成了private私有数据类型,则对外给属性设置... * dog类,用于演示类中属性赋值 * @author Katrina * */ public clas... -
java 利用反射机制,获取实体所有属性和方法,并对属性赋值
2020-08-31 15:08:08主要介绍了 java 利用反射机制,获取实体所有属性和方法,并对属性赋值的相关资料,需要的朋友可以参考下 -
通过java反射 获取对象属性值,并且给属性重新赋值
2021-11-25 21:58:23MenuPermissionVO menuPermission = new MenuPermissionVO(); Field[] declaredFields = menuPermission.getClass().getDeclaredFields(); for (Field field : declaredFields) { ... // 获取属性的类型 ...