java - Java 中比较器接口(interface)的构造函数

标签 java collections constructor interface

我知道接口(interface)不能有构造函数,我们不能创建接口(interface)的对象。

这是不可能的:

Comparator cmp = new Comparator(); 

我不明白如何使用关键字“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();
    }
 }

最佳答案

Doesn't this keyword create an object of the type Comparator?

是的,但它不会创建类 Comparator 的实例(因为 Comparator 不是类)。

它创建一个实现Comparator 接口(interface)的匿名类的实例。由于该类实例实现了 Comparator,因此您可以说它的类型是 Comparator

关于java - Java 中比较器接口(interface)的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49937586/

相关文章:

java - 为什么我们不能在 main() 方法之外向 ArrayList 添加元素?

java - 删除子字符串后跟java中的逗号

java - java 集合的不可修改包装器是否使它们成为线程安全的?

java - 错误: incompatible types: void cannot be converted to NumPal

c# - 我怎样才能调用构造函数?

java - RuntimeException : Unable to start activity(MainActivity cannot be cast to android. View .View$OnClickListener)

java - java中使用ArrayList的indexOf()

java - 用于存储排序的潜在相等元素的集合?

java - 使用添加或删除元素方法将哈希表实现为属性

java - intellij 运行 Serenity cucumber 测试