当没有与键关联的对象时应该抛出什么异常?
What exception should be thrown when there is no object associated with a key?
我有一个 API,我在其中检查是否有任何现有对象可用于给定键。如果可用,则更新现有对象,否则创建新对象并保存。
如果出现key可用但没有对象链接到它的情况,应该抛出哪个异常?
这实际上取决于您想如何构建 API。我认为你需要决定的第一件事是:这个异常是否应该被调用者捕获?换句话说,它是 RuntimeException 还是不是?
我想如果你想抛出异常,那是因为你的数据模型不应该有给定键的空/空对象。因此,我会主张 IllegalStateException 或 NoSuchElementException ,它扩展了 RuntimeException。这意味着不会强制调用者捕获异常。
如果你想强制调用者捕获异常,我建议你创建自己的异常,它只是扩展 Exception
编辑:
例如,一个名为"MissingValueException"的class定义如下:
public class MissingValueException extends Exception {
private static final long serialVersionUID = 1L;
public MissingValueException(final String message) {
super(message);
}
public MissingValueException(final String message, final Exception root) {
super(message, root);
}
}
我有一个 API,我在其中检查是否有任何现有对象可用于给定键。如果可用,则更新现有对象,否则创建新对象并保存。
如果出现key可用但没有对象链接到它的情况,应该抛出哪个异常?
这实际上取决于您想如何构建 API。我认为你需要决定的第一件事是:这个异常是否应该被调用者捕获?换句话说,它是 RuntimeException 还是不是?
我想如果你想抛出异常,那是因为你的数据模型不应该有给定键的空/空对象。因此,我会主张 IllegalStateException 或 NoSuchElementException ,它扩展了 RuntimeException。这意味着不会强制调用者捕获异常。
如果你想强制调用者捕获异常,我建议你创建自己的异常,它只是扩展 Exception
编辑:
例如,一个名为"MissingValueException"的class定义如下:
public class MissingValueException extends Exception {
private static final long serialVersionUID = 1L;
public MissingValueException(final String message) {
super(message);
}
public MissingValueException(final String message, final Exception root) {
super(message, root);
}
}