为什么在下面的代码中将“null”视为字符串并连接到文件名



我有一种方法可以检查操作系统类型并根据操作系统类型返回合适的路径。此路径由另一种方法使用,该方法接受此路径并将文件保存到帽子位置。现在,如果操作系统不是Windows,Linux或Mac,则该方法返回null 。问题是这个null被视为一个字符串,null被添加到保存文件的名称中,例如;nullFile.txt并将其保存在存储程序的位置。我该怎么做才能防止这种情况发生?

public static String checkOS() {
    String store = "";
    String OS = System.getProperty("os.name").toLowerCase();
    if(OS.indexOf("win") >= 0){
        store = "C:/";
    } else if(OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0 ){
        store = "/home/";
    } else  if(OS.indexOf("mac") >= 0){
        store = "/home/";
    } else{
        return null;
    }
    return store;
}

你没有显示代码,但你可能正在做

String filename = checkOS() + "File.txt";

在字符串串联中,null值将转换为字符串"null",因此您必须编写显式null检查。

String osName = checkOS();
String fileName;
if (osName == null)
    // do whatever you need to do
else
    filename = checkOS() + "File.txt";

至于从 checkOS 返回空字符串而不是 null 的选项,这是一种可能性,但无论哪种情况,checkOS 的调用者都需要测试结果,因为我确信您想为这种情况做一些不同的事情。 null回报是最通用的选择。

最新更新