This question already has answers here:
How are Anonymous inner classes used in Java?
(18个回答)
4年前关闭。
最近,我试图使人们更熟悉Java中的Comparator接口。我有一个练习,即将字符串的ArrayList从最短到最长排序。我使用了字符串比较器。在网上搜索时,我发现以下解决方案:
然后在代码中使用它对集合进行排序:
而且有效。我想问的是在这里定义lengthComparator对象的特定方式。我们创建一个新对象:
使用默认构造函数。但是,在“ {}”括号中还有一个覆盖了方法的代码。这是创建对象的正常方法吗?我从未见过它,我想了解更多有关它的信息。您能否建议我一些参考资料,以便在其中找到更多信息?
普通班例子
然后在您的程序中按以下方式对列表进行排序:
(18个回答)
4年前关闭。
最近,我试图使人们更熟悉Java中的Comparator接口。我有一个练习,即将字符串的ArrayList从最短到最长排序。我使用了字符串比较器。在网上搜索时,我发现以下解决方案:
public static Comparator<String> lengthComparator = new Comparator<String>() {
@Override
public int compare(String a, String b) {
if (a.length() == b.length()) {
return a.compareTo(b);
} else {
return (a.length() > b.length() ? 1 : -1);
}
}
};
然后在代码中使用它对集合进行排序:
Collections.sort(set, lengthComparator);
而且有效。我想问的是在这里定义lengthComparator对象的特定方式。我们创建一个新对象:
new Comparator<String>()
使用默认构造函数。但是,在“ {}”括号中还有一个覆盖了方法的代码。这是创建对象的正常方法吗?我从未见过它,我想了解更多有关它的信息。您能否建议我一些参考资料,以便在其中找到更多信息?
最佳答案
是的,这是创建对象的常用方法,称为anonymous class
。Comparator
是一个接口,您希望实例化一个类,因此您可以通过实现anonymous class
的Comparator
创建一个对象。
匿名类的例子
public void sortSetByStringLength(Set set) {
Comparator<String> lengthComparator = new Comparator<String>() {
@Override
public int compare(String a, String b) {
if (a.length() == b.length()) {
return a.compareTo(b);
} else {
return (a.length() > b.length() ? 1 : -1);
}
}
}
Collections.sort(set, lengthComparator);
}
普通班例子
public class LengthComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
if (a.length() == b.length()) {
return a.compareTo(b);
} else {
return (a.length() > b.length() ? 1 : -1);
}
}
}
然后在您的程序中按以下方式对列表进行排序:
public void sortSetByStringLength(Set set) {
Collections.sort(set, new LengthComparator());
}
10-07 12:06