在调整返回真/假的C风格函数时,最佳做法是什么?
这是一个简单的方法来说明问题所在。
public static boolean fileNameEndsWithExtension( String filename, String fileExtension) {
return filename.endsWith( fileExtension );
}
请注意,可能有更优雅的方式过滤文件(随意对此进行评论)。无论如何,如果filename是null
值,则执行一次:
null
的情况和String
或文件名不以给定文件扩展名结尾的情况?null
值。Exception
并强制程序员确保永远不会将null
值传递给方法?答案 0 :(得分:7)
如果filename为null,则应抛出NullPointerException或IllegalArgumentException。我会让你决定哪个是最好的。关于在问题中使用哪一个问题存在很好的争论:IllegalArgumentException or NullPointerException for a null parameter?
答案 1 :(得分:3)
您在特定应用程序的问题域中执行有意义的操作:
大多数情况下,选项3是明智的,但这里没有人可以排除其他人对您的应用程序的适用性。如果您有充分的理由传递了许多有意义的空文件名,那么选择其中一个可能是有意义的。
答案 2 :(得分:2)
我会使用1或3.最好是我会抛出NullPointerExceptions或至少使用assert。
返回可空的布尔值通常会导致比它们值得更多的麻烦,你检查空值等。除了fileNameEndsWithExtension()
看起来像一个函数,只有当你知道你有一个有效的文件名时才会使用。< / p>
另请注意,fileExtension
也可能为空。
答案 3 :(得分:1)
如果filename为null,我会返回false,并且不会因为null和任何其他非匹配值之间的区别而烦恼。
如果null filename是一个需要专门验证和处理的不同状态,那么应该单独验证,最好在检查endsWith()之前,但仍然在endsWith()中保留空值检查,以防止不必要的运行时异常。 / p>
我选择null = false行为的原因可能是由于关系数据库的影响。以下查询仅返回与条件匹配的行,其他所有内容(空值和不匹配)将被忽略。
select * from filenames
where filename like '&fileExtension';