我正在学习先决条件以及何时使用它们。我被告知前提条件
@pre fileName must be the name of a valid file
不适合以下代码:
/**
Creates a new FileReader, given the name of file to read from.
@param fileName- the name of file to read from
@throw FileNotFoundException - if the named file does not exist,
is a directory rather than a regular file, or for some other reason cannot
be opened for reading.
*/
public FileReader readFile(String fileName) throws FileNotFoundException {
. . .
}//readFile
为什么是这样?
编辑:另一个例子
作为示例,我们假设以下内容是以“正确”的方式完成的。请注意 IllegalArgumentException 和前提条件。请注意行为是如何定义良好的,以及即使设置了前提条件也是如何进行 throws 声明的。最重要的是,请注意它不包含 NullPointerException 的先决条件。再说一遍,为什么不呢?
/**
* @param start the beginning of the period
* @param end the end of the period; must not precede start
* @pre start <= end
* @post The time span of the returned period is positive.
* @throws IllegalArgumentException if start is after end
* @throws NullPointerException if start or end is null
*/
public Period(Date start, Date end) f
这些示例是否避免使用额外的先决条件?有人可能会争辩说,如果我们要避免先决条件,那为什么还要有它们呢?也就是说,为什么不用@throws 声明替换所有前提条件(如果避免它们是这里所做的)?