package demo;
import java.util.Objects;
public class Person implements Comparable<Person> {
@Override
public int compareTo(Person o) {
//return 0; //相同返回 0
//return this.getAge() - o.getAge(); //排序规则--升序排序
return o.getAge() - this.getAge(); //降序
}
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
private Person(String name) {
this.name = name;
}
public Person(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' + '\n';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Person newP = new Person("Jungle", 26); //已经准备好的本地数据
反射赋值
Class<?> Class_Person = Class.forName("demo.Person");
Constructor<?> con = Class_Person.getConstructor(); //获得构造函数
Object obj = con.newInstance(); //构造实例
if (obj instanceof Person) { //向下转型一定要判断
Person person = (Person)obj; //obj本来就是Person类型才可以这样向下转型
//对该实例赋值
Field[] fields = Class_Person.getDeclaredFields(); //获得字段数组
for (Field field : fields) {
field.setAccessible(true);
//字段如何自动化赋值 ?
//System.out.println(newP.getClass().getMethod("get" + field.getName().substring(0,1).toUpperCase() + field.getName().substring(1)).invoke(newP));
String sMethodName = "get" + field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);
field.set(person, newP.getClass().getMethod(sMethodName).invoke(newP));
}
System.out.println(person);
}