撰寫方法時容易忽略”非正常流程”的處理,特別是在趕工的時候。
對於檢查方法參數的有效性也有一套準則,從 Effective Java 整理出來。
Rule:
1.對於方法或是建構式的參數限制應該寫在註解中,並在方法的開頭檢查參數。
2.public 方法或是建構式可以使用 throw new xxxException 並在方法宣告加上註解@throws 說明違反參數規則會出現的異常。
3.private 方法可以使用 assert 斷言來限制, assert 必須開啟才有效。
(For eclipse → right click class in package explorer → run as → run configuration → arguments → VM arguments → type -ea)
4.不需要作檢查的情況為檢查成本太大,或是檢查會隱含在計算過程中(即使做了檢查也沒多大意義)。


 
jdk 中 File 類別的建構式,第7行檢查參數的有效性不可為null。

    /**
    ...
     * @throws  NullPointerException
     *          If the pathname argument is null
     */
    public File(String pathname) {
        if (pathname == null) {
            throw new NullPointerException();
        }
        this.path = fs.normalize(pathname);
        this.prefixLength = fs.prefixLength(this.path);
    }

另一個私有建構式也做了參數的檢查(第7,8行)

    /**
     * Internal constructor for already-normalized pathname strings.
     * The parameter order is used to disambiguate this method from the
     * public(File, String) constructor.
     */
    private File(String child, File parent) {
        assert parent.path != null;
        assert (!parent.path.equals(""));
        this.path = fs.resolve(parent.path, child);
        this.prefixLength = parent.prefixLength;
    }

 
 
至於第4點的後段”檢查會隱含在計算過程中” e.g.

    private File createFile(String filePath)
    {
        assert filePath != null;
        File result = new File(filePath);
        return result;
    }

第3行使用了 assert 來檢查傳入的參數是否為 null , 其實就是不需要的檢查。若是傳入 null,在第4行會丟出NullPointerException,
而不需要在方法開頭檢查。