我反复发现自己想要使用如下所示的界面:
interface Handler<T> {
void handle(T toHandle);
}
Run Code Online (Sandbox Code Playgroud)
在您希望围绕资源强制执行try-finally结构而不依赖API用户执行此操作的情况下,它尤其有用.
您的API实现可能如下所示:
public void loadResource(Handler<SomeResource> resourceHandler) {
SomeResource r = fetchTheResource();
try {
resourceHandler(r);
finally {
r.close();
}
}
Run Code Online (Sandbox Code Playgroud)
...... API消费者可以安全地做到:
loader.loadResource(new Handler<SomeResource>() {
public void handle(SomeResource resource) {
// use the resource, no need to worry about closing it.
}
});
Run Code Online (Sandbox Code Playgroud)
我知道Closeable界面.这不是那么普遍的目的 - 它不能强迫消费者正确关闭资源.
可以同样调用接口Receiver.番石榴Supplier几乎是相反的,但没有Receiver.
是否有一些核心接口具有我错过的这种结构?我在某种程度上做了其他人认为有些过分的事情吗?
我注意到在C#上下文中已经提出了完全相同的问题:这个接口是否已经存在于标准.NET库中?
java ×1