gpt4 book ai didi

java - 如何避免与 file.getParentFile() 进行 null 比较?

转载 作者:行者123 更新时间:2023-12-01 11:17:28 25 4
gpt4 key购买 nike

我有一个要创建的文件,因此我想确保在创建该文件之前其所有父目录都已就位(否则我会收到错误)。

File fileA = fileB.getParentFile();

现在,如果 fileB 实际上有一个父文件,则 fileA 将包含一个实际的文件对象。但是,如果 fileB 没有父级,则 fileA 将等于 null,并且在 fileA 上调用 createNewFile() 将导致 NullPointerException 错误。因此,安全创建 fileA 的唯一方法是执行以下操作:

if (fileA != null) {
fileA.mkdirs();
{
fileB.createNewFile();

但是,普遍的共识似乎是您永远不应该在代码中使用 != null 检查,因为这是不好的做法。这条规则有异常(exception)吗?这是其中之一吗?或者有更好的方式来表达这段代码吗?

最佳答案

通常,如果方法设计意味着所请求的对象在方法调用时可能不存在,则返回 null 没有任何问题(如 fileB.getParentFile 的示例所示) (); 其中 fileB 可以合法地没有父项)。

此外,根据所有 java-devs 圣经 --Effective Java,Joshua Bloch 的第二版 - 第 60 条,在某些情况下抛出并正确处理 NPE 是可以的:“如果调用者在某些参数中传递 null哪些 null 值是被禁止的,约定规定抛出 NullPointerException 而不是 IllegalArgumentException。”

避免空检查的另一个选项是 Null Object Pattern用法。如果你能帮助的话,不要返回 null,说真的。例如,对于集合,返回 Collections.emptyMap() (或任何其他空集合)被认为是一种很好的做法,而不是返回 null

有关避免 null 实践的更多信息,您可以检查类似 this 的内容。文章。如果我的解释看起来太模糊,请随时询问。

关于java - 如何避免与 file.getParentFile() 进行 null 比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31640128/

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