Java @方法之前的顺序(which=)注释
我需要在compareTo方法中比较我的对象,其中比较依赖于注释 方法(compareTo)取决于放置在getter之前的注释及其顺序参数 例如,在返回出生年份的getter前面,可以对名字和姓氏进行注释(按顺序): compareTo函数首先比较姓氏,如果相等,则指名字,如果进一步相等,则指出生年份Java @方法之前的顺序(which=)注释,java,Java,我需要在compareTo方法中比较我的对象,其中比较依赖于注释 方法(compareTo)取决于放置在getter之前的注释及其顺序参数 例如,在返回出生年份的getter前面,可以对名字和姓氏进行注释(按顺序): compareTo函数首先比较姓氏,如果相等,则指名字,如果进一步相等,则指出生年份 @Configuration class Person implements Comparable<Person>{ private String name; pri
@Configuration
class Person implements Comparable<Person>{
private String name;
private String username;
private int birth_year;
private int phone;
private String email;
private int PESEL;
public Person(String name, String username, int birth_year, int phone, String email, int PESEL) {
this.name = name;
this.username = username;
this.birth_year = birth_year;
this.phone = phone;
this.email = email;
this.PESEL = PESEL;
}
public int compareTo(Person p){
//
}
@Order(2)
public String getName() {
return name;
}
@Order(1)
public String getUsername() {
return username;
}
@Order(3)
public int getBirth_year() {
return birth_year;
}
@Order(4)
public int getPhone() {
return phone;
}
@Order(5)
public String getEmail() {
return email;
}
@Order(6)
public int getPESEL() {
return PESEL;
}
}
此外,我不知道写什么来解决这个问题
@Order (which = 3)
您不需要使用@Configuration
注释。似乎您需要创建自己的自定义注释,该注释中包含一个,该用int值初始化
要使用which
的值对方法进行排序,必须使用反射API。从Person
类中获取所有方法,并使用带有getAnnotation
方法的比较器对它们进行简单排序,然后调用which
。请注意没有此@Order
注释的方法,因为如果尝试调用which
,将得到NullPointerException
然后在对象上调用它们并比较结果。为什么需要注释?要做到这一点,需要反射API,这是出了名的慢
为什么不自己实现compareTo方法呢?IntelliJ可以为此生成代码,并且有一些很好的库使其非常好和高效
例如,番石榴:
public static void main(String[] args) {
Person per = new Person("Robert", "Brown", 1990, 543234234, "drfdrfdr@edu.pl", 123456789);
per.getName().getOrder();
}
@Order (which = 3)
public int compareTo(Person p){
return ComparisonChain.start()
.compare(this.username, that.username)
.compare(this.name, that.name)
.compare(this.birth_year, that.birth_year)
...
.result();
}