| |
小议局部类(1) 假如你有一个 integer 对象的列表,并且你想使用 coolections.sort 来对它们进行排序。另外,你还要自己指定一个比较器,因为你想按降序而不是升序排列它们。这里有一些代码示例说明了该怎么做:
import java.util.*;
public class localdemo1 {
// 使用实现了 comparator 的匿名类排序。
static void sortanon(list list) {
collections.sort(list, new comparator() {
public int compare(
object o1, object o2) {
int cc = ((integer)o1).compareto(o2);
return (cc < 0 ? 1 : cc > 0 ? -1 : 0);
}
});
}
// 使用实现了 comparator 的局部类排序
static void sortlocal(list list) {
class mycomparator implements comparator {
public int compare(
object o1, object o2) {
int cc = ((integer)o1).compareto(o2);
return (cc < 0 ? 1 : cc > 0 ? -1 : 0);
}
};
collections.sort(list, new mycomparator());
}
public static void main(string[] args) {
list list1 = new arraylist();
list1.add(new integer(1));
list1.add(new integer(2));
list1.add(new integer(3));
sortanon(list1);
system.out.println(list1);
list list2 = new arraylist();
list2.add(new integer(1));
list2.add(new integer(2));
list2.add(new integer(3));
sortlocal(list2);
system.out.println(list2);
}
}
这段程序的输出如下:
[3, 2, 1]
[3, 2, 1]
上列中使用两种不同的方法实现了 comparator 接口。第一种方法使用匿名类,第二种方法使用局部类,二者有何区别:
一点区别是格式上的??匿名类的定义比较简捷,它实际上是下面这个表达式的一部分:
comparator c = new comparator() {...};
与之相反,局部类的定义看起来非常类似于常规的类定义,略为烦琐。例如,定义局部类内时可能用到 “implements”语句,而在匿名类中不需要显示的使用这条语句。
哪一种格式“更好”取决于你自己的观点。匿名类的定义会比较难读,但在不需要使用局部类的地方使用局部类会造成一些错觉,让人觉得需要做的事比实际要做的事更多。 (未完待续)
|
|