1. 程式人生 > >Java反射小案例

Java反射小案例

Java反射小案例(一)

如題:一個實體類,例項化兩個物件A和B,將A物件屬性賦值。 通過反射的技術將A物件的屬性值賦給B物件(同一個類,不同物件相同屬性賦值

//		例項化兩個物件A和B
		Student stuA=new Student(1,"趙柳","女","18","湖北武漢","2018-12-1");
		Student stuB=new Student();
		
//		獲取Student  B類物件
		Class clazz = stuB.getClass();
		
//		獲取Student類 所有屬性
		Field[] declaredFields = clazz.getDeclaredFields();
		for (Field field : declaredFields) {
//			打破封裝(私有屬性)
			field.setAccessible(true);
//			使用set方法賦值,引數一:需賦值的物件,引數二:獲取值的物件
			field.set(stuB, field.get(stuA));
		}
		System.out.println(stuB);
	}

Student類

package com.simple.regflectOne;

public class Student {
	private int studentId;
	private String studentName;
	private String studentGender;
	private String studentAge;
	private String adress;
	private String birthDay;

	public int getStudentId() {
		return studentId;
	}

	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public String getStudentGender() {
		return studentGender;
	}

	public void setStudentGender(String studentGender) {
		this.studentGender = studentGender;
	}

	public String getStudentAge() {
		return studentAge;
	}

	public void setStudentAge(String studentAge) {
		this.studentAge = studentAge;
	}

	public String getAdress() {
		return adress;
	}

	public void setAdress(String adress) {
		this.adress = adress;
	}

	public String getBirthDay() {
		return birthDay;
	}

	public void setBirthDay(String birthDay) {
		this.birthDay = birthDay;
	}

	public Student(int studentId, String studentName, String studentGender,
			String studentAge, String adress, String birthDay) {
		super();
		this.studentId = studentId;
		this.studentName = studentName;
		this.studentGender = studentGender;
		this.studentAge = studentAge;
		this.adress = adress;
		this.birthDay = birthDay;
	}

	public Student() {
		super();
	}

	@Override
	public String toString() {
		return "Student [studentId=" + studentId + ", studentName="
				+ studentName + ", studentGender=" + studentGender
				+ ", studentAge=" + studentAge + ", adress=" + adress
				+ ", birthDay=" + birthDay + "]";
	}

}

Java反射小案例(二)

如題: 兩個不同實體類,例項化兩個物件A和B,將A物件屬性賦值。 通過反射的技術將A物件的屬性值賦給B物件中相同的屬性(不同類,相同屬性賦值

package RegflectOne;

import java.lang.reflect.Field;

public class TestTwo {

	public static void main(String[] args) throws IllegalArgumentException,
			IllegalAccessException {
		// 例項化兩個物件A和B
		Student stuA = new Student(1, "王武", "男", "18", "湖北武漢", "2018-12-1");
		Teacher teaB = new Teacher();

		// 獲取類物件
		Class stu = Student.class;
		Class tea = Teacher.class;

		// 獲取類類中屬性
		Field[] declaredFieldsStu = stu.getDeclaredFields();
		Field[] declaredFieldsTea = tea.getDeclaredFields();

		for (Field fieldStu : declaredFieldsStu) {
			for (Field fieldTea : declaredFieldsTea) {
				// 打破封裝
				fieldStu.setAccessible(true);
				fieldTea.setAccessible(true);
				//判斷給相同的屬性賦值
				if (fieldStu.getName().equals(fieldTea.getName())) {
					fieldTea.set(teaB, fieldStu.get(stuA));
				}
			}
		}
		 System.out.println(teaB);
	}
}

Student類

package RegflectOne;

public class Student {
	private int studentId;
	private String studentName;
	private String studentGender;
	private String studentAge;
	private String adress;
	private String birthDay;

	public int getStudentId() {
		return studentId;
	}

	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public String getStudentGender() {
		return studentGender;
	}

	public void setStudentGender(String studentGender) {
		this.studentGender = studentGender;
	}

	public String getStudentAge() {
		return studentAge;
	}

	public void setStudentAge(String studentAge) {
		this.studentAge = studentAge;
	}

	public String getAdress() {
		return adress;
	}

	public void setAdress(String adress) {
		this.adress = adress;
	}

	public String getBirthDay() {
		return birthDay;
	}

	public void setBirthDay(String birthDay) {
		this.birthDay = birthDay;
	}

	public Student(int studentId, String studentName, String studentGender,
			String studentAge, String adress, String birthDay) {
		super();
		this.studentId = studentId;
		this.studentName = studentName;
		this.studentGender = studentGender;
		this.studentAge = studentAge;
		this.adress = adress;
		this.birthDay = birthDay;
	}

	public Student() {
		super();
	}

	@Override
	public String toString() {
		return "Student [studentId=" + studentId + ", studentName="
				+ studentName + ", studentGender=" + studentGender
				+ ", studentAge=" + studentAge + ", adress=" + adress
				+ ", birthDay=" + birthDay + "]";
	}

}

Teacher類

package RegflectOne;

public class Teacher {
	private int teacherId;
	public String studentName;
	public String studentGender;
	
	public int getTeacherId() {
		return teacherId;
	}

	public void setTeacherId(int teacherId) {
		this.teacherId = teacherId;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public String getStudentGender() {
		return studentGender;
	}

	public void setStudentGender(String studentGender) {
		this.studentGender = studentGender;
	}

	public Teacher(int teacherId, String studentName, String studentGender) {
		super();
		this.teacherId = teacherId;
		this.studentName = studentName;
		this.studentGender = studentGender;
	}

	public Teacher() {
		super();
	}

	@Override
	public String toString() {
		return "Teacher [teacherId=" + teacherId + ", studentName="
				+ studentName + ", studentGender=" + studentGender + "]";
	}
	
	
}