Java什么是“Execute Around”?
我听说过的“Execute Around”是什么?为什么我要使用它,为什么我不想使用它?
回答:
基本上,是在这种模式下,你编写一种方法来执行始终需要执行的操作,例如资源分配和清理,并使调用者传递“我们想对资源进行的操作”。例如:
public interface InputStreamAction{
void useStream(InputStream stream) throws IOException;
}
// Somewhere else
public void executeWithFile(String filename, InputStreamAction action)
throws IOException
{
InputStream stream = new FileInputStream(filename);
try {
action.useStream(stream);
} finally {
stream.close();
}
}
// Calling it
executeWithFile("filename.txt", new InputStreamAction()
{
public void useStream(InputStream stream) throws IOException
{
// Code to use the stream goes here
}
});
// Calling it with Java 8 Lambda Expression:
executeWithFile("filename.txt", s -> System.out.println(s.read()));
// Or with Java 8 Method reference:
executeWithFile("filename.txt", ClassName::methodName);
调用代码无需担心打开/清理的一面,它将由处理executeWithFile
。
坦白说,这在Java中是很痛苦的,因为闭包是如此word,从Java 8 lambda表达式开始就可以像许多其他语言一样实现(例如C#lambda
表达式或Groovy
),并且这种特殊情况是从Java 7开始使用try-with-resourcesand AutoClosable流
处理的。
尽管“分配和清理”是给出的典型示例,但还有许多其他可能的示例-事务处理,日志记录,以更多特权执行某些代码等。它基本上有点类似于模板方法模式,但没有继承。
以上是 Java什么是“Execute Around”? 的全部内容, 来源链接: utcz.com/qa/417695.html