2012-05-07 79 views
0

在使用斷言爲e.g爲什麼斷言追加默認斷言消息


try{ 
assert email!=null : "Email is required" 
} catch (AssertionError ae) { 
System.out.println(ae.getMessage()); 
} 

上面打印電子郵件是必需的。表達:電子郵件= NULL

我不希望這個額外的消息表達:電子郵件= NULL這就是我知道我可以串,但黑客攻擊。

回答

3

您在這裏誤用了assert。它不是用來控制程序的流程。您應該在這裏使用if

當您確定不會發生此情況時,您應該只使用assert。在這種情況下,應用程序應該崩潰並打印出錯的地方。請注意,應用程序啓動時可能會關閉斷言。

+0

我將在休息服務中使用它們來向用戶回覆正確的錯誤消息。如果爲每個參數添加if-else,那麼要好得多。 –

+0

@Hussain:如果你真的想在這裏學到一些東西,那就不要以這種方式使用斷言。 if-else是絕對好的。 – Kai

+1

+1當您遇到只能表示您遇到編碼問題或錯誤的情況時,請使用斷言。在合理測試之後,應該可以安全地關閉生產。如果您正在驗證輸入或任何「正常」錯誤狀態,請使用if/throw。 –

0

有沒有簡單的方法。請記住,assert通常是在正確的程序操作過程中永遠不會發生的事情。因此,關聯的消息僅用於調試。

從所述official documentation

注意,詳細消息是用戶級的錯誤消息,因此它通常是不必要的,使這些消息在隔離可以理解的,或國際化它們。詳細消息旨在在完整堆棧跟蹤的情況下進行解釋,並結合包含失敗斷言的源代碼進行解釋。