排序比较器(代码示例,来自FSM 、Cay Horstmann)
使用闭包前:
List<String> list = ...
Collections.sort(list, new Comparator<String>() {
public int compare(String str1, String str2) {
return str1.length() - str2.length();
}
});
Collections.sort(list, new Comparator<String>() {
public int compare(String str1, String str2) {
return str1.length() - str2.length();
}
});
使用闭包后:
List<String> list = ...
Collections.sort(list, #(String str1, String str2) {
return str1.length() - str2.length();
});
Collections.sort(list, #(String str1, String str2) {
return str1.length() - str2.length();
});
甚至或简化成:
Collections.sort(strings,
#(String a, String b) a.length() - b.length());
#(String a, String b) a.length() - b.length());
最后,我们复习一下javadoc中的#的用法:
引用当前类的成员字段、方法、构造器
@see#field @see#method(Type, Type,...)
@see#method(Type argname, Type argname,...)
@see#constructor(Type, Type,...)
@see#constructor(Type argname, Type argname,...)
引用已经导入的类的成员字段、方法、构造器,或嵌套类
@seeClass#field @seeClass#method(Type, Type,...)
@seeClass#method(Type argname, Type argname,...)
@seeClass#constructor(Type, Type,...)
@seeClass#constructor(Type argname, Type argname,...)
@seeClass.NestedClass @seeClass
@seeClass#method(Type argname, Type argname,...)
@seeClass#constructor(Type, Type,...)
@seeClass#constructor(Type argname, Type argname,...)
@seeClass.NestedClass @seeClass
引用其他包里的成员
@seepackage.Class#field
@seepackage.Class#method(Type, Type,...)
@seepackage.Class#method(Type argname, Type argname,...)
@seepackage.Class#method(Type, Type,...)
@seepackage.Class#method(Type argname, Type argname,...)
@seepackage.Class#constructor(Type, Type,...)
@seepackage.Class#constructor(Type argname, Type argname,...)
@seepackage.Class.NestedClass
@seepackage.Class
@seepackage
因此,在Java 7中,里面提到的大部分问题都得到了改进,甚至包括现在突然宣布要加入的闭包,并让函数成为一等公民。这应该是一件好事,只是,有个小小的疑惑,Java似乎越来越像Ruby这样的动态语言了,Java 7还会是我们熟悉的Java么?