调整返回true / false的方法

时间:2010-04-04 21:36:09

标签: java methods boolean

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

这是一个简单的方法来说明问题所在。

public static boolean fileNameEndsWithExtension( String filename, String fileExtension)  { 
    return filename.endsWith( fileExtension );
}

请注意,可能有更优雅的方式过滤文件(随意对此进行评论)。无论如何,如果filename是null值,则执行一次:

  1. 如果filename为null,则返回false?如果是这样,如何区分文件名为null的情况和String或文件名不以给定文件扩展名结尾的情况?
  2. 将返回类型更改为包含类Boolean,允许null值。
  3. 抛出Exception并强制程序员确保永远不会将null值传递给方法?
  4. 使用其他解决方案?

4 个答案:

答案 0 :(得分:7)

如果filename为null,则应抛出NullPointerException或IllegalArgumentException。我会让你决定哪个是最好的。关于在问题中使用哪一个问题存在很好的争论:IllegalArgumentException or NullPointerException for a null parameter?

答案 1 :(得分:3)

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

  1. 如果说空文件名集以任何扩展名结尾是有意义的,则返回true。
  2. 如果说空文件名集没有扩展名有意义,则返回false。
  3. 如果说任何人都不应该问这个问题是有意义的,那就让代码扔掉。
  4. 如果有三值结果是有意义的,请确保使用布尔值。
  5. 或制作一个三值枚举并从那里返回。
  6. 大多数情况下,选项3是明智的,但这里没有人可以排除其他人对您的应用程序的适用性。如果您有充分的理由传递了许多有意义的空文件名,那么选择其中一个可能是有意义的。

答案 2 :(得分:2)

我会使用1或3.最好是我会抛出NullPointerExceptions或至少使用assert

返回可空的布尔值通常会导致比它们值得更多的麻烦,你检查空值等。除了fileNameEndsWithExtension()看起来像一个函数,只有当你知道你有一个有效的文件名时才会使用。< / p>

另请注意,fileExtension也可能为空。

答案 3 :(得分:1)

  1. 返回true IFF filename.endsWith(fileExtension)
  2. 如果filename为null,我会返回false,并且不会因为null和任何其他非匹配值之间的区别而烦恼。

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

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

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