程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 小議局部類

小議局部類

編輯:JAVA編程入門知識

  假如你有一個 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”語句,而在匿名類中不需要顯示的使用這條語句。
  
  哪一種格式“更好”取決於你自己的觀點。匿名類的定義會比較難讀,但在不需要使用局部類的地方使用局部類會造成一些錯覺,讓人覺得需要做的事比實際要做的事更多。
  
  讓我們來看看另一個例子,更深層的比較匿名類和局部類:
  
  import java.util.*;
  
  public class LocalDemo2 {
  
  // 使用兩個單獨的匿名類實例對兩個列表進行排序
  
  static void sort1(List list1, List list2) {
  
  Collections.sort(list1, new Comparator() {
  
  public int compare(
  
  Object o1, Object o2) {
  
  int cc = ((Integer)o1).compareTo(o2);
  
  return (cc < 0 ? 1 : cc > 0 ? -1 : 0);
  
  }
  
  });
  
  Collections.sort(list2, new Comparator() {
  
  public int compare(
  
  Object o1, Object o2) {
  
  int cc = ((Integer)o1).compareTo(o2);
  return (cc < 0 ? 1 : cc > 0 ? -1 : 0);
  
  }
  
  });
  
  }
  
  // 使用一個局部類的兩個實例來對兩個列表進行排序
  
  static void sort2(List list1, List list2) {
  
  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(list1, new MyComparator());
  
  Collections.sort(list2, new MyComparator());
  
  }
  
  // 使用一個匿名類的一個實例來對兩個列表進行排序
  
  static void sort3(List list1, List list2) {
  
  Comparator cmp = new Comparator() {
  
  public int compare(
  
  Object o1, Object o2) {
  
  int cc = ((Integer)o1).compareTo(o2);
  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved