Java 调整返回真/假的方法

Java 调整返回真/假的方法,java,methods,boolean,Java,Methods,Boolean,在调整C风格函数时,最好的做法是什么?C风格函数向Java返回真/假 这里有一个简单的方法来说明问题所在 public static boolean fileNameEndsWithExtension( String filename, String fileExtension) { return filename.endsWith( fileExtension ); } 请注意,可能有一种更优雅的过滤文件的方法(请随意评论)。无论如何,如果文件名为null值,是否有: 如果文件名

在调整C风格函数时,最好的做法是什么?C风格函数向Java返回真/假

这里有一个简单的方法来说明问题所在

public static boolean fileNameEndsWithExtension( String filename, String fileExtension)  { 
    return filename.endsWith( fileExtension );
}
请注意,可能有一种更优雅的过滤文件的方法(请随意评论)。无论如何,如果文件名为
null
值,是否有:

  • 如果文件名为null,是否返回false?如果是这样,如何区分文件名为
    null
    字符串或文件名不以给定文件扩展名结尾的情况
  • 将返回类型更改为允许
    null
    值的包装类布尔值
  • 抛出一个
    异常
    并强制程序员确保
    null
    值从未传递给该方法
  • 使用另一种解决方案

  • 您可以在特定应用程序的问题域中执行有意义的操作:

  • 如果可以说空文件名集以任何扩展名结尾,那么返回true
  • 如果说空文件名集以没有扩展名结尾是有意义的,那么返回false
  • 如果说没有人应该问这个问题是有道理的,那么让代码抛出
  • 如果有三个值的结果是有意义的,当然可以使用布尔值
  • 或者创建一个三值枚举并从中返回

  • 大多数情况下,选项3是合理的,但这里没有人可以排除其他选项对您的应用程序的适用性。如果您传递了大量有意义的空文件名,那么从其他文件名中选择一个可能是有意义的。

    如果文件名为空,您应该抛出NullPointerException或IllegalArgumentException。我会让你决定哪一个最好。关于在这个问题中使用哪一个有很好的争论:

    我会使用1或3。我最好抛出NullPointerException,或者至少使用一个

    返回可为null的布尔值通常会带来更多的麻烦,您需要检查是否存在null值等。除了
    filenameendswixtension()
    看起来像是一个函数,只有当您知道自己有一个有效的文件名时,您才会使用它

    另外,不要忘记
    fileExtension
    也可能是空值

  • 返回真的IFF filename.endsWith(文件扩展名)
  • 如果文件名为null,我将返回false,而不必理会null和任何其他不匹配值之间的区别

    如果null filename是一种需要特别验证和处理的不同状态,那么应该单独验证,最好是在检查endsWith()之前,但仍然在endsWith()中保留null检查,以防止不必要的运行时异常

    我之所以选择null=false的行为,可能是因为关系数据库的影响。下面的查询将只返回与条件匹配的行,其他所有内容(null和不匹配)都将被忽略

    select * from filenames
     where filename like '&fileExtension';
    

    请参阅以获取可能的选项(4)+1,当然,如果您保持原样,您将已经获得一个适当的
    NullPointerException
    ;我可能不会再费心了。选项1和2非常可怕,因为它们会将错误推迟到稍后的某个时间点,在这一点上可能更难调试。关于NPE与IAE:我建议使用NPE,因为它在标准库中被广泛使用,用来表示参数非法
    null
    。Java7甚至将引入
    Java.util.Objects
    ,它将有一个用于单行反空检查和赋值的实用方法(如果参数为null,则给出一个NPE)。NPE已经成为一种简单的方法。相关RFE:很高兴听到这个消息。这将节省一个实用方法来检查空值的时间。我理解这个推理,因为我以前已经习惯了。顺便说一句,带有JQL/JPA/Hibernate的getResult()也会返回空值(通常分配给列表)。