Java静态Comparator实例赋值语法解析及使用疑问
嘿,我来帮你拆解这段代码,其实它比看起来要直观得多!
先明确:这是个存储了Comparator实例的静态变量
首先,TypeComparer不是方法,它是一个静态类变量,里面存储的是一个实现了Comparator<Type>接口的匿名内部类对象。
代码原理拆解
你看到的这段代码是Java里的匿名内部类写法:
public static Comparator<Type> TypeComparer = new Comparator<Type>() { public int compare(Type a, Type b) { return a.compareTo(b); } };
Comparator<Type>是一个函数式接口(只有一个必须实现的抽象方法compare),所以我们可以直接在new Comparator<Type>()后面加一对大括号,重写compare方法,不用单独创建一个类来实现这个接口。- 这里的
compare方法内部直接调用了Type类的compareTo方法,这说明你的Type类本身已经实现了Comparable<Type>接口(否则a.compareTo(b)会编译报错)。
如何使用这个对象
这个TypeComparer对象可以用在任何需要Comparator参数的场景里:
- 对集合排序:
List<Type> myList = new ArrayList<>(); // 添加元素... Collections.sort(myList, TypeComparer); - 对数组排序:
Type[] myArray = new Type[10]; // 初始化数组... Arrays.sort(myArray, TypeComparer); - 直接调用它的
compare方法比较两个对象:Type obj1 = new Type(); Type obj2 = new Type(); int comparisonResult = TypeComparer.compare(obj1, obj2);
调用compare方法返回什么
返回值遵循Java比较的通用规则:
- 如果
a的排序优先级低于b(也就是a < b),返回负整数 - 如果
a和b排序优先级相同(a == b),返回0 - 如果
a的排序优先级高于b(a > b),返回正整数
因为这里直接复用了Type类自己的compareTo逻辑,所以返回结果和你直接调用obj1.compareTo(obj2)完全一致。
小补充:Java 8+的简化写法
如果用Java 8及以上版本,这段代码可以用Lambda表达式简化,看起来更清爽:
public static Comparator<Type> TypeComparer = (a, b) -> a.compareTo(b);
甚至可以直接用JDK提供的工具方法:
public static Comparator<Type> TypeComparer = Comparator.naturalOrder();
这两种写法和你原来的代码功能完全一样。
内容的提问来源于stack exchange,提问作者lonious
相关产品推荐
相关产品推荐

