BeanUtils.getProperty(order, “customers[1].name”);//取得顾客列表中第一个顾客的名字
- 与getProperty类似的还有getIndexedProperty, getMappedProperty方法
-Collection: 提供index
BeanUtils.getIndexedProperty(order,“items”,1);
//或者
BeanUtils.getIndexedProperty(order,“items[1]”);
- Map: 提供Key Value //key-value goods_no=111
BeanUtils.getMappedProperty(order, “items”,“111”);
或者
BeanUtils.getMappedProperty(order, “items(111)”);
示例:
创建实体类User和Order,两者之间的关系是User:Order = 1:N,即一个用户对应多个Order,具体代码如下:
public class Address {
private int id;
private String email;
private List addrs;
//…… 不包含addrs的构造方法
}
public class Emp {
private int id;
private String name;
private Date birth;
private Address address;
private String[] array;
private List list;
private Map<String, Integer> maps;
//……不包含array、list、maps的构造方法
}
public class Dept {
private int deptno;
private String dname;
private String loc;
}
备注:上面实体类,均省略了getter/setter方法、toString方法、默认构造方法、全参的构造方法。
- 演示如何利用BeanUtils为对象的指定属性赋值:
@Test
public void testSetProperty() throws Exception {
Address address = new Address();
BeanUtils.setProperty(address, “id”, 20);
BeanUtils.setProperty(address, “email”, “hcitlife@hotmail.com”);
List addrs = Arrays.asList(new String[] { “BEIJING”, “SHANGHAI” });
BeanUtils.setProperty(address, “addrs”, addrs);
System.out.println(address);
}
- 演示如何利用BeanUtils获取对象属性的值:
在测试类中提供如下代码:
private void init(Address address, Emp emp) throws Exception {
List addrs = Arrays.asList(new String[] { “BEIJING”, “SHANGHAI” });
address.setAddrs(addrs);
emp.setArray(new String[] { “aaaa”, “bbbb”, “ccc” });
Map<String, Integer> maps = new HashMap<String, Integer>();
maps.put(“a”, 1111);
maps.put(“b”, 2222);
maps.put(“c”, 3333);
emp.setMaps(maps);
emp.setList(Arrays.asList(new String[] { “111”, “222”, “333” }));
}
@Test
public void testGetProperty() throws Exception {
Address address = new Address(20, “hcitlife@hotmail.com”);
Emp emp = new Emp(7788, “ZHANGSAN”, new Date(), address);
init(address, emp);
// 输出对象的某个属性的值
System.out.print(BeanUtils.getProperty(address, “id”) + “\t”);
System.out.println(BeanUtils.getProperty(emp, “birth”));
// 输出对象的内嵌属性的值
System.out.println(BeanUtils.getProperty(emp, “address.email”));
// 输出嵌套字段的值
System.out.println(BeanUtils.getNestedProperty(emp, “address.email”));
// 访问Map中元素的值
System.out.print(BeanUtils.getProperty(emp, “maps”) + “\t”);
System.out.print(BeanUtils.getProperty(emp, “maps.a”) + “\t”);
System.out.print(BeanUtils.getProperty(emp, “maps(b)”) + “\t”);
System.out.println(BeanUtils.getMappedProperty(emp, “maps”, “c”));
// 访问数组字段的值
System.out.print(BeanUtils.getProperty(emp, “array[0]”) + “\t”);
String[] array = BeanUtils.getArrayProperty(emp, “array”);
System.out.print(array[1] + “\t”);
System.out.println(BeanUtils.getIndexedProperty(emp, “array”, 2));
// 访问集合字段的值
System.out.print(BeanUtils.getProperty(emp, “list”) + “\t”);
System.out.print(BeanUtils.getArrayProperty(emp, “list”)[1] + “\t”);
System.out.println(BeanUtils.getIndexedProperty(emp, “list”, 2));
// 综合
System.out.println(BeanUtils.getProperty(emp, “address.addrs[1]”));
}
- public static void BeanUtils.copyProperties(Object dest,Object orig)
通过反射将orig对象的值拷贝给dest对象(前提是对象中属性的名字相同),这种拷贝是浅拷贝,复制后的2个Bean的同一个属性可能拥有同一个对象,在使用时要小心,特别是对于属性为自定义类的情况。
@Test
public void testCopyProperties() throws Exception {// 拷贝属性
Address address = new Address(20, “hcitlife@hotmail.com”);
address.setAddrs(Arrays.asList(new String[] { “BEIJING”, “SHANGHAI” }));
Emp emp = new Emp();
emp.setBirth(new Date());//Date类型的属性必须指定
emp.setAddress(address);
Emp emp2 = new Emp();
BeanUtils.copyProperties(emp2, emp);
System.out.println(emp2.getAddress());
System.out.println(emp.getAddress() == emp2.getAddress()); //------①
emp.getAddress().setEmail(“lianghecai52171314@126.com”);
System.out.println(emp2.getAddress());
}
编号①处输出结果为true,表示两个Emp的address指赂了同一个Address对象,所以在下面代码中即使只是改变了emp的address的值,emp2的值也随之发生变化了。
- public static void BeanUtils.copyProperty(Object bean, String name, Object value)
将value值拷贝给bean的name属性,这种拷贝是浅拷贝。BeanUtils在对Bean赋值是时会进行类型转化,即发现两个JavaBean的同名属性为不同类型时,BeanUtils的copyProperty()方法会在支持的数据类型范围内进行转换。
BeanUtils默认支持的转换类型如下:
| 数据类型 | 数据类型 |
| — | — |
| java.lang.BigDecimal | java.lang.BigInteger |
| boolean 、 java.lang.Boolean | byte 、 java.lang.Byte |
| Char 、java.lang.Character | java.lang.Class |
| double 、 java.lang.Double | float 、 java.lang.Float |
| int 、 java.lang.Integer | long 、 java.lang.Long |
| short 、 java.lang.Short | java.lang.String |
| java.sql.Date | java.sql.Time |
| java.sql.Timestamp | |
需要注意的是,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。
@Test
public void testCopyProperty() throws Exception {// 拷贝一个值给目标Bean的一个属性
Address address = new Address(20, “hcitlife@hotmail.com”);
List addrs = Arrays.asList(new String[] { “BEIJING”, “SHANGHAI” });
address.setAddrs(addrs);
Emp emp = new Emp();
emp.setBirth(new Date());//Date类型的属性必须指定
emp.setAddress(address);
Emp emp2 = new Emp();
BeanUtils.copyProperty(emp2, “address”, address);
System.out.println(emp.getAddress() == emp2.getAddress());
address.setAddrs(Arrays.asList(new String[] { “beijing”, “shanghai” }));
System.out.println(emp2.getAddress());
}
- public static Object BeanUtils.cloneBean(Object bean)
拷贝Bean,这种拷贝是浅拷贝。
@Test
public void testCloneBean() throws Exception { // 拷贝对象
Address address = new Address(20, “hcitlife@hotmail.com”);
List addrs = Arrays.asList(new String[] { “BEIJING”, “SHANGHAI” });
address.setAddrs(addrs);
Emp emp = new Emp();
emp.setBirth(new Date());//Date类型的属性必须指定
emp.setAddress(address);
Emp emp2 = (Emp) BeanUtils.cloneBean(emp);
System.out.println(emp2.getAddress());
System.out.println(emp.getAddress() == emp2.getAddress());
emp.getAddress().setEmail(“lianghecai52171314@126.com”);
System.out.println(emp2.getAddress());
}
- static java.util.Map describe(java.lang.Object bean)
返回一个Object中所有的可读属性,并将属性名/属性值放入一个Map中,另外还有一个名为class的属性,属性值是Object的类名,事实上class是java.lang.Object的一个属性。
@Test
public void testDescribe() throws Exception {
Address address = new Address(20, “hcitlife@hotmail.com”);
List addrs = Arrays.asList(new String[] { “BEIJING”, “SHANGHAI” });
address.setAddrs(addrs);
Map<String, Object> map = BeanUtils.describe(address);
map.forEach((k, v) -> System.out.println(k + " : " + v));
}
- static void populate(java.lang.Object bean, java.util.Map properties)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/d2e21f364235cd228838032500322510.jpeg)
最后
看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
[外链图片转存中…(img-D7Lo7OSU-1713604233677)]
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
[外链图片转存中…(img-tLqRgHHT-1713604233677)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!