Java中比较器接口的构造函数

elv*_*vis 7 java collections constructor interface

我知道一个接口不能有构造函数,我们不能创建接口对象.

这是不可能的:

Comparator cmp = new Comparator(); 
Run Code Online (Sandbox Code Playgroud)

我不明白如何使用关键字"new Comparator()"创建一个匿名内部类.此关键字是否不会创建Comparator类型的对象?

这是完整的代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class DemoApp {

    public static void main(String args[]) {

        List<String> animals = new ArrayList<>();
        animals.add("elephant");
        animals.add("snake");
        animals.add("lion");
        animals.add("mangoose");
        animals.add("cat");
        animals.add("tiger");

        Collections.sort(animals, new Comparator<String>() {
            public int compare(String s1, String s2) {
                return -s1.compareTo(s2);
            }
        });
        displayList(animals);
    }

    public static void displayList(List<String> anim) {
        for (String animal : anim) {
            System.out.print(animal + " "); 
        }
        System.out.println();
    }
 }
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

此关键字是否不会创建Comparator类型的对象?

是的确如此,但它不会创建一个类的实例Comparator(因为Comparator它不是一个类).

它创建一个实现Comparator接口的匿名类的实例.由于该类实例实现Comparator,您可以说它的类型是Comparator.