Java反射小案例
阿新 • • 發佈:2018-12-09
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 + "]";
}
}