服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

小议局部类(1)


  小议局部类(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”语句,而在匿名类中不需要显示的使用这条语句。

哪一种格式“更好”取决于你自己的观点。匿名类的定义会比较难读,但在不需要使用局部类的地方使用局部类会造成一些错觉,让人觉得需要做的事比实际要做的事更多。
(未完待续)

扫描关注微信公众号