环绕执行模式

JDK1.7 引入的 TWR 语法, 令读取文件后的资源释放变得更加简洁。

public static String processFile() throws IOException {
    try (BufferedReader bufferedReader =
                 new BufferedReader(new FileReader("1.txt"))) {
        return bufferedReader.readLine();
    }
}

lambda

行为参数化

上面的方法中有局限。

如果我想返回头 2 行的内容,甚至返回最频繁的,怎么办?

我们要做的就是将 processFile()行为参数化

传递行为,正是 lambda 擅长的。

代码看起来可能是这样:

String result = processFile((BufferedReader br)->br.readLine()+br.readLine());

定义函数式接口

与上面我们的定义相互匹配。

/**
 * 文件读取
 * @author bbhou
 */
@FunctionalInterface
public interface BufferedReaderProcessor {

    /**
     * 执行
     * @param bufferedReader
     * @return
     * @throws IOException
     */
    String process(BufferedReader bufferedReader) throws IOException;

}

执行一个行为

public static String processFile(BufferedReaderProcessor bufferedReaderProcessor) throws IOException {
    try(BufferedReader bufferedReader = new BufferedReader(new FileReader("1.txt"))) {
        return bufferedReaderProcessor.process(bufferedReader);
    }
}

传递 lambda

public static void main(String[] args) throws IOException {
    processFile((BufferedReader br)->br.readLine()+br.readLine());
}