java 我应该返回一个空对象还是null [关闭]

x8diyxa7  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(174)

已关闭。此问题为opinion-based。目前不接受回答。
**要改进此问题吗?**更新此问题,以便editing this post可以使用事实和引文来回答。

昨天就关门了。
Improve this question
假设我正在阅读一个文件;我想检查一个文件是否为空,并希望它对该文件进行一些更改。在这种情况下,我可以直接打开它,如果文件夹、文件或其他内容错误,我可以返回;这不会影响我的应用,因为更改仅对文件进行。类似于以下情况:

public static void doStuffOnFile(String filePath) {
        File file = new File(filePath);

        if (!file.getParentFile().exists()) {
            System.out.println("The directory does not exist.");
            return;
        }

        if (!file.exists()) {
            System.out.println("The file does not exist.");
            return;
        }

        if (file.length() == 0) {
            System.out.println("The file is empty.");
            return;
        }

        // Here is stuff that will be done to the file
    }

字符串
但是,如果我需要从文件中获取一些东西,而文件夹或文件不存在,我是返回null还是返回空字符串呢?

public static String readFileContent(String filePath) {
        File file = new File(filePath);

        if (!file.getParentFile().exists()) {
            System.out.println("The directory does not exist.");
            return null;
        }

        if (!file.exists()) {
            System.out.println("The file does not exist.");
            return "";
        }

        if (file.length() == 0) {
            System.out.println("The file is empty.");
            return null;
        }

        try {
            return new String(Files.readAllBytes(Paths.get(filePath)));
        } catch (IOException e) {
            System.out.println("There was an error reading the file.");
            e.printStackTrace();
            return "";
        }
    }


这就是我的问题:当我们有一个方法返回的不是void的东西,在它有错误的情况下,我们想让它停止它,你是返回null还是一个空的对象?

dnph8jn4

dnph8jn41#

返回null或空对象的决定通常取决于上下文以及对应用程序及其用户最有意义的决定。
返回null通常表示不存在值,而空对象(如空字符串或空列表)表示有效但为空的结果。
在阅读文件的上下文中:

  • 如果文件或其目录不存在,则从预期生成文件内容的方法返回null可能是合适的,这表明没有任何内容可检索。
  • 如果文件存在但为空,则返回空字符串可能更合适。这表明文件存在,但不包含任何数据。

如果不小心处理,返回null有时会导致潜在的null指针异常。另一方面,返回一个空对象可以确保调用者可以处理结果,而不必担心潜在的null检查。
您的决定还应该考虑调用方将如何与返回值进行交互。如果null可能导致消费代码中的意外行为,请考虑返回空对象。但是,如果缺少文件或目录是调用方需要与空文件区分的关键信息,则返回null可能更合适。
在Java中,对于文件操作,通常会在这种情况下抛出异常(如FileNotFoundExceptionIOException),调用代码可以显式地捕获和处理这些异常。这可以让调用者更清楚地看到出错了。

所以,在你的情况下,这可能是值得考虑的:

  • 使用异常更明确地处理与文件相关的问题。
  • 对于不存在的文件或目录返回null,对于空文件返回空字符串(如果这符合应用程序的逻辑)。
  • 清楚地记录方法的行为,特别是如果返回null,以指导用户如何处理这些情况。
sauutmhj

sauutmhj2#

这真的取决于你的集成和你期望的结果。如果你期望和空字符串,你会知道如何处理它。
我的建议是使用一个有意义的异常。抛出一个有意义的消息的异常,并在调用者类中处理异常。如果文件不存在或者你有其他读/写问题,你将有很好的可见性。

相关问题