Java接口/比较器
我是java新手,试图理解一些概念。这是一段我不懂的代码Java接口/比较器,java,Java,我是java新手,试图理解一些概念。这是一段我不懂的代码 public static Comparator<Fruit> FruitNameComparator = new Comparator<Fruit>() { public int compare(Fruit fruit1, Fruit fruit2) { return fruit1.quantity - fruit2.quantity; } }; publicstat
public static Comparator<Fruit> FruitNameComparator = new Comparator<Fruit>()
{
public int compare(Fruit fruit1, Fruit fruit2)
{
return fruit1.quantity - fruit2.quantity;
}
};
publicstaticcomparator-fructnameparator=newcomparator()
{
公共int比较(水果水果1、水果水果2)
{
返回结果1.数量-结果2.数量;
}
};
我知道这是怎么回事,但不明白为什么这是允许的。因此,我的问题是:
任何输入都将不胜感激。此代码使用Java的一个特性,名为。指定要实现/扩展的接口或超类以及匿名类主体。您的匿名内部类实现了
Comparator
它是一个匿名类,是一个类型(超级类或接口)的内嵌具体实现
为类型声明的任何抽象方法提供实现
对于超类,不能指定调用的构造函数,因此如果没有默认的/no-args构造函数,则必须提供参数
对于接口,构造函数中不能指定任何参数,因为接口不能声明构造函数
顺便说一句,我倾向于给你的字段命名为
fruitQuantityComparator
,而不是fruitNameComparator
,因为它比较的是数量,而不是名称。+1实际上,如果你把它放在一个名为MyClass
的类中并编译它,你会看到一个类似MyClass$1.class
的文件。这是此匿名类的类文件。将其读取为…=新的(实现的类)Comparator()谢谢。在阅读了我们的评论并思考之后,我理解了为什么该准则是合法的。正是我要找的。