当用户尝试添加到完整容器时抛出的异常

dam*_*mon 4 java queue exception

我正在尝试为泛型类型元素编写一个固定大小的队列.用户可以调用构造函数,提供一个大小,并为该大小创建一个内部数组.(见下文)

class FixedSizeQ<E>{
    private E[] q;
    private int N;

    public FixedSizeQ(int max) {
        super();
        q = (E[]) new Object[max];
        N = 0;
    }
..
}
Run Code Online (Sandbox Code Playgroud)

我想到了为上面定义一个isEmpty()和isFull()方法以及一个insert()方法.如果客户端试图向已经完整的数组添加一个元素,我想抛出一个异常.通过javadocs,我以为IllegalStateException抛出是正确的例外.

public boolean isFull(){
    return N == q.length;
}
public void insert(Item item){
    if(isFull()){
        throw new IllegalStateException("queue full");
    }
    ...     
}
Run Code Online (Sandbox Code Playgroud)

我想知道我的理解是否正确.有人建议IllegalArgumentException更合适.有人可以提出建议吗?

Jon*_*oni 6

我认为你应该让insert方法返回boolean,如果插入了对象则返回true,如果队列已满,则返回false.将对象添加到完整队列对我来说似乎不是一个例外情况.

在任何情况下,如果Java API中没有预定义的异常是一个很好的匹配,您可以创建自己的异常类型以最好地适应这种情况:

public class QueueFullException extends RuntimeException {
    // or "extends Exception" if you want it checked
    ...
}
Run Code Online (Sandbox Code Playgroud)