Javaexception命名约定

在Java中,使用“ Illegal ”(如IllegalArgumentException )与“ Invalid ”(如javax.activity.InvalidActivityException )之间是否存在语义差异?

在赋值过程中,编写IllegalArgumentException的子类来表示一系列无法​​标记的输入字符变得很有用,我想知道约定是否使用InvalidTokenExceptionIllegalTokenException

我到目前为止唯一的区别是java.lang似乎更喜欢“非法”而javax.*更喜欢“无效”。 但是,还有java.security.InvalidParameterException ,它是IllegalArgumentException的子类。

您可以合法使用API​​并仍然拥有无效数据; 这都是语义学。

javax.activity.InvalidActivityExceptioninheritance自java.rmi.RemoteException ,您可能不希望这种依赖。 另见Javadoc

EDIT同时使用Invalid和Illegal同义词它在语义上没有差别,只是上面提到的技术问题。

编辑:从Postgres 文档部分45.3.14。 要避免的棘手的话:

非法 。 “非法”代表违法,其余是“无效”。 更好的是,说明为什么它无效。

只有当您想要发出错误使用API​​方法调用的信号时,才应使用AFAIK,IllegalArgumentException。 你所描述的是一个API被错误使用的场景,所以我认为IllegalArgumentException是更好的选择。