环绕执行模式
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());
}