什么时候IllegalAccessException合适?

时间:2014-03-02 07:39:11

标签: java exception

假设您有一个名为Timer的班级。当用户尝试调用方法Timer#start()时,代码会检查计时器是否已经启动。如果有,则无法再次启动。现在,假设这个类是库/ API的一部分。开发人员无法知道该方法没有被不恰当地调用,因此他们希望关注任何不正确的调用。这样做的两种方法是:a)打印一个简单的错误消息(某某方法不恰当地称为方法),或b)抛出异常。

在我看来,最有意义的异常是IllegalAccessException,尽管这不是Sun所说的意图。但是,我已经看到它用于与可见性无关的情况,并且只是抛出它来引起对不良呼叫的注意。我的问题是,这种情况是否需要(哈哈,双关语)说异常,还是有更好的适合它?或者,最好是创建一个新的或只是打印一个错误行?

2 个答案:

答案 0 :(得分:1)

根据您的要求,似乎IllegalStateException更合适。由于你的班级正在管理计时器的某些状态。

来自Java Doc的IllegalStateException

  

表示某个方法已被非法或非法调用     不恰当的时间换句话说,Java环境或     Java应用程序未处于所请求的适当状态     操作

来自IllegalAccessException的Java文档,它说:

  

应用程序尝试时抛出IllegalAccessException     反射创建一个实例(除了数组),     设置或获取字段,或调用方法,但当前     执行方法无法访问定义     指定的类,字段,方法或构造函数。

所以,IllegalAccessException根本不合适。

答案 1 :(得分:0)

这种情况非常明显地与IllegalAccessException的语义不符,但听起来非常适合IllegalStateException