java-think in java 检测工程索引列表
java--think in java 检测工程目录列表
think in java 第四版 第18.1.1章节,列出了3套代码,来表示一个功能的三种实现。
三种不同的实现,对代码进行了不同程度压缩。
代码:
package io; //: io/DirList.java // Display a directory listing using regular expressions. // {Args: "D.*\.java"} import java.util.regex.*; import java.io.*; import java.util.*; public class DirList { public static void main(String[] args) { File path = new File("."); String[] list; if(args.length == 0) list = path.list(); else list = path.list(new DirFilter(args[0])); Arrays.sort(list, String.CASE_INSENSITIVE_ORDER); for(String dirItem : list) System.out.println(dirItem); } } class DirFilter implements FilenameFilter { private Pattern pattern; public DirFilter(String regex) { pattern = Pattern.compile(regex); } public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } } /* Output: DirectoryDemo.java DirList.java DirList2.java DirList3.java *///:~
package io; //: io/DirList2.java // Uses anonymous inner classes. // {Args: "D.*\.java"} import java.util.regex.*; import java.io.*; import java.util.*; public class DirList2 { public static FilenameFilter filter(final String regex) { // Creation of anonymous inner class: return new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }; // End of anonymous inner class } public static void main(String[] args) { File path = new File("."); String[] list; if(args.length == 0) list = path.list(); else list = path.list(filter(args[0])); Arrays.sort(list, String.CASE_INSENSITIVE_ORDER); for(String dirItem : list) System.out.println(dirItem); } } /* Output: DirectoryDemo.java DirList.java DirList2.java DirList3.java *///:~
在list方法使用匿名内部类作为方法的参数。
优点:代码隔离、聚拢于一点。
缺点:不易阅读。
package io; //: io/DirList3.java // Building the anonymous inner class "in-place." // {Args: "D.*\.java"} import java.util.regex.*; import java.io.*; import java.util.*; public class DirList3 { public static void main(final String[] args) { File path = new File("."); String[] list; if(args.length == 0) list = path.list(); else list = path.list(new FilenameFilter() { private Pattern pattern = Pattern.compile(args[0]); public boolean accept(File dir, String name) { return pattern.matcher(name).matches(); } }); Arrays.sort(list, String.CASE_INSENSITIVE_ORDER); for(String dirItem : list) System.out.println(dirItem); } } /* Output: DirectoryDemo.java DirList.java DirList2.java DirList3.java *///:~