相关疑难解决方法(0)

如何在Java中定义自定义异常类,最简单的方法是什么?

我正在尝试以最简单的方式定义自己的异常类,这就是我得到的:

public class MyException extends Exception {}

public class Foo {
  public bar() throws MyException {
    throw new MyException("try again please");
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是Java编译器所说的:

cannot find symbol: constructor MyException(java.lang.String)
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,这个构造函数必须继承自己java.lang.Exception,不是吗?

java inheritance exception

281
推荐指数
5
解决办法
40万
查看次数

IllegalStateException的用途是什么?

今天与同事讨论了这个问题.

爪哇的Javadocs IllegalStateException说它:

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

而Effective Java则说(项目60,第248页):

另一个常用的异常是IllegalStateException.如果由于接收对象的状态而调用是非法的,则通常会抛出异常.例如,如果调用者在正确初始化之前尝试使用某个对象,则抛出此异常.

看来这里有一点差异.javadocs的第二句使得听起来像异常可以描述关于Java执行状态的非常宽泛的条件,但是Effective Java中的描述使得它听起来像是用于特定于与对象的状态状态相关的条件.方法已被调用.

我在JDK(例如集合Matcher)和Guava中看到的用法肯定似乎属于Effective Java谈论的类别("此对象处于无法调用此方法的状态").这也似乎与IllegalStateException兄弟姐妹一致IllegalArgumentException.

IllegalStateExceptionJDK中是否存在与"Java环境"或"Java应用程序"相关的合法用法?或者是否有任何最佳实践指南主张将其用于更广泛的执行状态?如果没有,为什么这样的javadocs就像那样?;)

java exception illegalstateexception

74
推荐指数
2
解决办法
6万
查看次数

什么例外 - "错误的场景"(Java)

这是一个愚蠢的问题 - 但它让我感到困惑.
从现有的(库)Java异常中,我应该抛出以下内容.
我有一个在错误的场景中使用的方法(它的基本假设不成立).
这个方法没有参数 - 所以我倾向于跳过IllegalArgumentException.

作为一个例子 - 考虑一个BinaryNode只有两个左/右子节点的类.

为简洁起见,有一个removeOnlyChild()方法很好,只有当这个节点实际只有一个子节点(不是0或2)时才适用.
显然,如果有人调用有2 n.removeOnlyChild()个子节点的节点n,则应该抛出异常.
超出标准的Java异常 - 你认为它应该是什么,为什么?

我实际上每隔一段时间就会浏览一下这个列表,当这个弹出时,只是随身IllegalStateException携带InternalError.

java exception

1
推荐指数
1
解决办法
110
查看次数