我試圖爲Java實現自動資源管理(類似於C#的using
)。以下是我想出代碼:Java中的貸款模式/自動資源管理
import java.lang.reflect.*;
import java.io.*;
interface ResourceUser<T> {
void use(T resource);
}
class LoanPattern {
public static <T> void using(T resource, ResourceUser<T> user) {
Method closeMethod = null;
try {
closeMethod = resource.getClass().getMethod("close");
user.use(resource);
}
catch(Exception x) {
x.printStackTrace();
}
finally {
try {
closeMethod.invoke(resource);
}
catch(Exception x) {
x.printStackTrace();
}
}
}
public static void main(String[] args) {
using(new PrintWriter(System.out,true), new ResourceUser<PrintWriter>() {
public void use(PrintWriter writer) {
writer.println("Hello");
}
});
}
}
請分析一下上面的代碼,讓我知道任何可能的缺陷,也建議我如何改善這一點。謝謝。
(對不起,我英文不好,我不是以英語爲母語。)
我要說的一個問題是你的ResourceUser的方法不能返回一個值。在很多情況下你可能會想要。這應該很容易。 – ColinD 2010-03-29 14:52:41