package com.dxy.study_0628.study.reflect;
import com.dxy.study_0628.domain.Tu;
import com.dxy.study_0628.domain.User;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* 关于反射的使用
*/
public class fs_04 {
public static void main(String[] args) throws IllegalAccessException {
ArrayList<User> user1 = new ArrayList<>();
user1.add(new User());
ArrayList<Tu> user2 = new ArrayList<>();
user2.add(new Tu());
fs_04 fs_04 = new fs_04();
//fs_04.copy(user1,user2);
User user = new User(4, null, "3");
System.out.println(user);
fs_04.copy2(user, new Tu(7, "us","yy"));
System.out.println(user);
}
public List copy(List lista,List listb){
if(lista.size()>0){
Object o = lista.get(0);
Class<?> aClass = o.getClass();
//获取lista的所有属性
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field:declaredFields){
System.out.println(field);
}
}
System.out.println("----------------");
if(listb.size()>0){
Class<?> bClass = listb.get(0).getClass();
Field[] declaredFields = bClass.getDeclaredFields();
for (Field field:declaredFields){
System.out.println(field);
}
}
return lista;
}
/**
* 属性赋值
* @param object1
* @param object2
* @return
* @throws IllegalAccessException
*/
public Object copy(Object object1,Object object2) throws IllegalAccessException {
Field[] declaredFields1 = object1.getClass().getDeclaredFields();
Field[] declaredFields2 = object2.getClass().getDeclaredFields();
for (Field field:declaredFields1){
System.out.println(field);
}
System.out.println("----------------");
for (Field field:declaredFields2){
System.out.println(field);
}
for (Field field:declaredFields1){
if (!field.isAccessible()) {
field.setAccessible(true);
}
//System.out.println(field.getName() + ":" + field.get(object1));
//一个一个判断这个属性有没有
for (Field field2:declaredFields2){
if (!field2.isAccessible()) {
field2.setAccessible(true);
}
if(field.getName().equals(field2.getName())){
//为空或者为0的情况下都要覆盖
if(field.get(object1)==null || (field.getType().getName().equals("int") && (int)(field.get(object1))==0)){
//一个个赋值过去
field.set(object1,field2.get(object2));
}
}
}
}
return object1;
}
/**
* 相同属性由object2赋值到object1
* 只有为空或者为0(int)时才会覆盖
* @param object1
* @param object2
* @throws IllegalAccessException
*/
public void copy2(Object object1,Object object2) throws IllegalAccessException {
//获取各自对象
Field[] declaredFields1 = object1.getClass().getDeclaredFields();
Field[] declaredFields2 = object2.getClass().getDeclaredFields();
//遍历object1
for (Field field:declaredFields1){
if (!field.isAccessible()) {
field.setAccessible(true);
}
//System.out.println(field.getName() + ":" + field.get(object1));
//一个一个判断这个属性有没有
for (Field field2:declaredFields2){
if (!field2.isAccessible()) {
field2.setAccessible(true);
}
if(field.getName().equals(field2.getName())){
//为空或者为0的情况下都要覆盖
if(field.get(object1)==null || (field.getType().getName().equals("int") && (int)(field.get(object1))==0)){
//一个个赋值过去
field.set(object1,field2.get(object2));
}
}
}
}
}
}
java将某一个对象中的非空字段覆盖到另外一个对象中
Guess you like
Origin blog.csdn.net/qq_40711092/article/details/120688140
Ranking