抛出UnsupportedOperationException

11

所以其中一种方法的描述如下:

public BasicLinkedList addToFront(T data) 此操作对于排序列表无效。将生成UnsupportedOperationException,使用消息“Invalid operation for sorted list”。

我的代码大致如下:

public BasicLinkedList<T> addToFront(T data) {
    try {
        throw new UnsupportedOperationException("Invalid operation for sorted list.");
    } catch (java.lang.UnsupportedOperationException e) {
        System.out.println("Invalid operation for sorted list.");
    }
    return this;
}

这样做是正确的吗?我只是使用println()打印出了消息,但是否有其他生成消息的方法?


1
最好在catch块中使用System.out.println(e.getMessage());。 - Java42
你在 Catch 块中抛出异常并捕获它!如果不捕获,就不会被捕获。 - Emad Aghaei
2个回答

19

您不应该在方法中捕获异常 - 关键是让调用者知道该操作不受支持:

public BasicLinkedList<T> addToFront(T data) {
    throw new UnsupportedOperationException("Invalid operation for sorted list.");
}

但这会为任何传入的数据引发问题。您需要单独处理SortedList类型的数据(请查看我的答案)。 - DigCamara
好的,看了CoderNinja的评论,这个SortedLinkedList是BasicLinkedList的子类吗?如果是的话,那么SortedLinkedList中覆盖的方法应该抛出异常。这与T的类型无关。 - Jason
是的,那是我最初的想法,但我正在进行一些测试(例如,我有一个sortedLinkedList s的实例),我调用了s.addToFront(),这导致代码出错,我认为我实现得有问题。看来这就是我应该做的。 - CoderNinja

3
您可以按照以下方式重写您的代码:
public BasicLinkedList<T> addToFront(T data) throws UnsupportedOperationException {
    if (this instanceof SortedList) {
        throw new UnsupportedOperationException("Invalid operation for sorted list.");
    }else{
        return this;
    }
}

那基本上就完成了你的要求。

好的,我的想法是我有一个basicLinkedList类,它有一个addToFront方法,但在我的sortedLinkedList类中,add方法根据排序将节点添加到适当的位置。因此,不能调用addToFront,因为这可能会破坏sortedList。至于我想要实现什么,完全取决于问题的要求。我不确定应该如何生成消息(通过println?还是通过异常本身,就像当你得到所有那些红色垃圾时)。 - CoderNinja

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