2014-03-02 74 views
1

假設你有一個叫Timer的班級。當用戶試圖調用方法Timer#start()時,代碼檢查定時器是否已經啓動。如果有,那麼它不能再啓動它。現在,說這個類是庫/ API的一部分。開發人員不知道該方法沒有被不恰當地調用,所以他們想要引起關注任何不正確的調用。這樣做的兩種方式是a)打印一個簡單的錯誤消息(某某某方法不恰當地調用了方法),或者b)拋出一個異常。何時適合IllegalAccessException?

在我看來,最有意義的例外是IllegalAccessException,儘管這不是Sun所說的意圖。但是,我已經看到它在與可視性無關的情況下使用,並且只是將它拋出以引起對不良通話的注意。我的問題是,這種情況需要(哈哈,雙關語)說例外,還是有更適合它的嗎?或者,最好是創建一個新的還是隻打印一個錯誤行?

+2

你把它和['IllegalStateException'](http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalStateException.html)混淆了嗎? 'IllegalAccessException'對此沒有任何意義。 – user2357112

+0

@ user2357112是的,這很可能是我誤解了我過去看到的異常。 – caseif

回答

1

根據您的要求,似乎IllegalStateException更合適。因爲你的班級正在管理Timer的某些狀態。

從Java文檔的IllegalStateException:一個方法已在非法或 不適當的時間調用

信號。換句話說,對於請求的 操作,Java環境或Java應用程序不處於適當的狀態。

從Java文檔的IllegalAccessException,它說:當應用程序試圖 來反思創建一個實例(而不是數組), 設置或獲取一個字段

的IllegalAccessException被拋出,或調用一個方法,但是當前的執行方法不能訪問指定的類,字段,方法或構造函數的定義 。

so,IllegalAccessException根本不合適。

0

這種情況很明顯不符合IllegalAccessException的語義,但它聽起來像是一個確切的適合IllegalStateException