gpt4 book ai didi

c# - Java中的贷款模式/自动资源管理

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:40 26 4
gpt4 key购买 nike

我曾尝试为 Java 实现自动资源管理(类似于 C# 的 using)。以下是我想出的代码:

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");
}
});
}
}

请分析上面的代码,让我知道任何可能的缺陷,并建议我如何改进它。谢谢。

(抱歉我的英语不好。我的母语不是英语。)

最佳答案

我会像这样修改您的using 方法:

public static <T> void using(T resource, ResourceUser<T> user) {
try {
user.use(resource);
} finally {
try {
Method closeMethod = resource.getClass().getMethod("close");
closeMethod.invoke(resource);
} catch (NoSuchMethodException e) {
// not closable
} catch (SecurityException e) {
// not closable
}
}
}

另外,您需要为资源不可关闭 的情况定义您想要的行为(当您捕捉到上述异常时)。您可以抛出一个特定的异常,如 UnclosableResourceException 或完全忽略这种情况。您甚至可以使用这 2 种行为(usingtryUsing)实现 2 种方法。

关于c# - Java中的贷款模式/自动资源管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2538559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com