2013-06-20 197 views
1
public Card getCard()throws IOException{ 
    Card c = null; 
    String cardInfo = null; 
    assert readStream != null: cardInfo = readStream.readLine(); 
    assert cardInfo != null: c = CreateCard(cardInfo); 
    return c; 
} 

我有點失控的做法,我試圖通過使用assert語句來測試空值來提高我的代碼質量。似乎工作的方式,我最終不得不雛菊鏈我的斷言,因爲如果我測試的第一件事是空的,那麼下一個將是一個空以及......我是否正確使用Java斷言?

+2

使用Java斷言,冒號後的部分是消息給讀者,併到標準輸出。另外,如果'readStream'爲空,它們的下一部分永遠不會被執行,所以你不必擔心'cardInfo'。但是你從哪裏得到'readStream'呢?這種方法的目的是什麼? –

+0

請注意,您需要使用'-ea'啓動JVM才能啓用斷言 – fge

回答

0

一個斷言是它可以在開發中和在生產中關閉。在發佈之前,它會揭示錯誤,大概在它們發生嚴重損壞之前。關閉時,斷言是無效的,並且(有希望)具有可忽略的性能影響。

我想問自己的問題是:「自我,我的斷言使用是否符合這些標準?」

1

下面是斷言

  • 一些準則與問候,不要使用斷言驗證的公共職能參數。 這些函數應拋出NullPointerException, IllegalArgumentException和其他相關異常。 由於公共函數將被其他程序員使用,因此如果他們搞砸了,你應該確保他們得到正確的錯誤。
  • 使用斷言來檢查 保護和私有訪問方法的參數的先決條件和後置條件。
  • 請勿使用斷言來檢查軟件用戶錯誤。如果您希望 您的基於網絡的在線銷售系統的用戶輸入一個10位數的 信用卡號碼,並且她只輸入9位數字,請不要使用斷言。 相反,拋出IllegalArgumentException。如果你使用斷言,儘快 作爲有人關閉您的servlet容器斷言,您的系統中的 檢查邏輯將消失。
  • 用斷言檢查參數和變量的條件 不應該發生
  • 用斷言檢查無效代碼分支
  • 不要使用斷言做任何工作。斷言是開發人員級別 錯誤,不應用於修復程序中的狀態或執行復雜日誌記錄。此外,不要忘記,如果用戶運行沒有聲明的 程序,代碼將會消失。如果該代碼是 對於程序的運行至關重要,那麼您可能會在深層次上遇到問題 。
  • 不要打擾國際化斷言錯誤消息。由於斷言是開發人員級別的問題,所以 國際化將浪費時間。
  • 使用斷言來檢查發佈條件。如果你創建的方法和 希望它永遠不會返回NULL用戶