gpt4 book ai didi

java - 从 try-catch block 返回值的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 07:44:34 26 4
gpt4 key购买 nike

由于缺少返回值而无法工作的示例:

public Path writeToFile() {
try {
Path tempFilePath = Files.createTempFile(Paths.get(""), "sorting_test_", ".txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(tempFilePath.toFile()));

for (List<Integer> arr : arrays) {
// Convert array ints to strings, join it to single string and write
bw.write(arr.stream()
.map(String::valueOf)
.collect(Collectors.joining(" ")));
bw.newLine();
}
bw.close();

return tempFilePath;
} catch (IOException e) {
e.printStackTrace();
}
}

我知道我可以这样做:

public Path writeToFile() {
Path tempFilePath = null;
//try-catch{...}
return tempFilePath;
}

但是看起来很丑。有没有更自然的方法来解决这个任务?

最佳答案

以下是一些可能的解决方案:

  • 将方法签名更改为 public void writeToFile() 。不要返回Path 。 (但这可能对您不起作用:您可能需要 Path 。)

  • 添加return null;在该方法的末尾。这样做的缺点是调用者需要处理 null 的情况。返回...否则当他们尝试使用不存在的 Path 时将会得到 NPE。 .

    这相当于你的“丑陋”解决方案。从风格角度来看哪个更好是有争议的。 (教条式的“结构化编程”人会说你的方法更好!)

  • 更改签名以返回 Optional<Path> 。这是比返回显式 null 更好的选择。如果你正确地实现它,调用者实际上被迫处理“缺席”的情况。

  • 删除try catch并将方法签名更改为 public Path writeToFile() throws IOException 。调用者必须处理已检查的异常,但这可能是一件好事!

<小时/>

我应该指出,您的代码没有正确处理资源。您应该使用 try with resources 来确保 FileWriter 创建的流总是关闭。否则,存在泄漏文件描述符的风险,最终可能导致意外的 I/O 错误。

关于java - 从 try-catch block 返回值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55912424/

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