该声明如何工作:&#34;静态最终比较器<employee> SENIORITY_ORDER = new Comparator <employee>(){};&#34;

时间:2016-03-19 04:44:03

标签: java

我正在学习Java,我在Youtube上看到了下面的代码。我只是想知道这部分代码是如何工作的。

static final Comparator<Employee> SENIORITY_ORDER = 
                                            new Comparator<Employee>() {
                public int compare(Employee e1, Employee e2) {
                    return e2.hireDate().compareTo(e1.hireDate());
                }
        };

有些人可以向我解释一下吗?在此先感谢您的帮助!

import java.util.*;
public class EmpSort {
    static final Comparator<Employee> SENIORITY_ORDER = 
                                        new Comparator<Employee>() {
            public int compare(Employee e1, Employee e2) {
                return e2.hireDate().compareTo(e1.hireDate());
            }
    };

    // Employee database
    static final Collection<Employee> employees = ... ;

    public static void main(String[] args) {
        List<Employee> e = new ArrayList<Employee>(employees);
        Collections.sort(e, SENIORITY_ORDER);
        System.out.println(e);
    }
}

3 个答案:

答案 0 :(得分:1)

SENIORITY_ORDER Comparator(用于比较排序中的Employee)是Anonymous Class。链接的Java教程读取(部分)

  

匿名类使您可以使代码更简洁。它们使您能够同时声明和实例化一个类。他们就像当地的班级,除了他们没有名字。如果您只需要使用本地类一次,请使用它们。

答案 1 :(得分:0)

好吧我们都知道。比较器是如何比较两个对象的规则。

你可以进入这个方法:Collections.sort(e,SENIORITY_ORDER);

你会看到你想要的答案

    public static <T> void sort(List<T> list, Comparator<? super T> c) {
    Object[] a = list.toArray();
    Arrays.sort(a, (Comparator)c);  //this is your rule to compare
    ListIterator i = list.listIterator();
    for (int j=0; j<a.length; j++) {
        i.next();
        i.set(a[j]);
    }
}

如果您的Object没有实现可比性,那么您必须拥有一个比较器 或者这将是一个错误。 Collections.sort将调用compare()方法。

答案 2 :(得分:0)

static final Comparator<Employee> SENIORITY_ORDER = 
                                            new Comparator<Employee>() {
                public int compare(Employee e1, Employee e2) {
                    return e2.hireDate().compareTo(e1.hireDate());
                }
        };

语句static final Comparator<Employee> SENIORITY_ORDER = new Comparator<Employee>(){} 正在创建Comparator<Employee>接口的引用,该引用指向实现Comparator<Employee>接口的匿名内部类的实例。因此,您将覆盖匿名类中的比较器接口compare()方法。

compare()方法内部,您正在使用Java中Employee接口的compareTo()方法比较两个Comparable对象的 hireDate 属性。此方法compareTo()从字典上比较两个属性,即 e1.hireDate e2.hireDate ,并返回正整数,负整数或零,具体取决于 e2.hireDate 是大于,小于还是等于 e1.hireDate

(希望您已经对JAVA中的比较器界面嵌套类的概念了如指掌)