繁体   English   中英

适应方法返回true / false

[英]Adapting methods which return true/false

适应向Java返回true / false的C样式函数时的最佳实践是什么?

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

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

请注意,可能有一种更优雅的文件过滤方法(可以对此发表评论)。 无论如何,如果filename是一个null值,则执行以下操作:

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

如果filename为null,则应引发NullPointerException或IllegalArgumentException。 我让你决定哪个最好。 有一个关于该问题的辩论: IllegalArgumentException或NullPointerException是否为null参数?

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

  1. 如果说空文件名以任何扩展名结尾都是合理的,则返回true。
  2. 如果说空文件名以无扩展名结尾是合理的,则返回false。
  3. 如果说没有人应该问这个问题是有道理的,请让代码抛出。
  4. 如果有意义的话,可以使用三值结果,请使用布尔值。
  5. 或做一个三值枚举并从那返回。

在大多数情况下,选项3会很明智,但是这里没有人可以排除其他选项对您的应用程序的适用性。 如果您出于充分的原因传递了很多有意义的空文件名,则选择其他文件名可能很有意义。

我将使用1或3。最好是抛出NullPointerExceptions或至少使用assert

返回可为空的布尔值通常会带来比其价值更大的麻烦,您需要检查空值等。除了fileNameEndsWithExtension()看起来像一个函数,只有当您知道自己具有有效的文件名时才会使用。

同样不要忘记fileExtension也可能为null。

  1. 返回true IFF filename.endsWith(fileExtension)

如果filename为null,我将返回false,并且不理会null与其他任何不匹配值之间的区别。

如果空文件名是需要特别验证和处理的独特状态,则应单独进行验证,最好在检查endsWith()之前进行验证,但仍将null检查保留在endsWith()中,以防止不必要的运行时异常。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM