Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @方法之前的顺序(which=)注释_Java - Fatal编程技术网

Java @方法之前的顺序(which=)注释

Java @方法之前的顺序(which=)注释,java,Java,我需要在compareTo方法中比较我的对象,其中比较依赖于注释 方法(compareTo)取决于放置在getter之前的注释及其顺序参数 例如,在返回出生年份的getter前面,可以对名字和姓氏进行注释(按顺序): compareTo函数首先比较姓氏,如果相等,则指名字,如果进一步相等,则指出生年份 @Configuration class Person implements Comparable<Person>{ private String name; pri

我需要在compareTo方法中比较我的对象,其中比较依赖于注释

方法(compareTo)取决于放置在getter之前的注释及其顺序参数

例如,在返回出生年份的getter前面,可以对名字和姓氏进行注释(按顺序):

compareTo函数首先比较姓氏,如果相等,则指名字,如果进一步相等,则指出生年份

@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();
}