非法方法调用

7
我有一个Java类,处理单值和多值数据。因此,它公开了两种方法:getValue()getValues()。但是,当针对多值数据调用getValue方法时,我想抛出某种异常。我应该使用哪个最相关的异常类?我觉得IllegalAccessException不合适,因为我没有使用反射或任何发现技术;IllegalArgumentException也不合适,因为我没有传递任何参数。

2
抱歉,但我感觉有些不对劲。你能告诉我们更多关于你的程序结构的信息,甚至可以展示一些代码吗?也许你只需要一个方法,并让它接受一个参数来告诉类要返回多少个值。根据你上面发布的内容,我不知道你需要什么。关于你的问题,有时候最简单和最好的方法是为此创建自己的异常类。但首先让我们看看你是否真的需要这个。 - Hovercraft Full Of Eels
代码有些像这样:class{ private Collection<T> values; // 返回单个值,或抛出异常 public T getValue(); // 返回多个值或包装在集合中的单个值 public Collection<T> getValues(); } - Neel
3个回答

21

9

java.lang.IllegalStateException 是处理此问题的最佳标准异常。

JavaDoc说:

表示方法已在不合适的时间被调用。换句话说,Java环境或Java应用程序并不处于请求操作的适当状态。

在您的情况下,这意味着所调用的方法在不合适的时候被调用了。


1
听起来有点不适合我的情况,因为我的对象本身并不处于非法状态。 - Neel
嗯,现在可能不是一个合适的时间,对吧?但事实是,由于我的对象应该是多值的,所以getValue应该返回哪个值是不确定的(可能不期望零值)。 - Neel
IllegalStateException通常用于具有状态标志/指示器的类;例如,具有布尔切换以从一个输入/输出类切换到另一个输入/输出类。由于该类本身不是基于状态的类(状态值是从数据中派生的),因此这不是使用ISEx的最佳情况;但最终决定应基于确切的实现。如果OP的类以这种方式工作,则ISEx通常用于IO类、迭代器等,ISEx也是一个很好的选择。 - user719662

0

你可以为这个类创建自己的异常,尝试查看这个链接

你可以像这样做:

class getValException extends Exception
{
    public getValException(String message) 
    {
        super(message);
    }
}

2
除非绝对必要,否则可能创建自己的异常并不是一个好主意,因为这将需要人们学习新的API,对吗? - Neel
2
Bloch在《Effective Java第二版》中指出,如果已经存在适当的异常时仍然创建新的异常是一种不好的编程实践。 - user719662

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接