【问题标题】:Throwing an UnsupportedOperationException抛出 UnsupportedOperationException
【发布时间】:2013-02-26 02:21:01
【问题描述】:

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

public BasicLinkedList addToFront(T data) 该操作无效 对于排序列表。将生成 UnsupportedOperationException 使用消息“排序列表的无效操作”。

我的代码是这样的:

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() 打印出消息,但有没有其他方法可以生成消息?

【问题讨论】:

  • 最好使用 System.out.println(e.getMessage());在捕获范围内。
  • 你抛出一个异常并在 Catch 块中捕获它!你没有抓住它。

标签: java exception-handling try-catch


【解决方案1】:

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

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

【讨论】:

  • 但这会为任何传入数据抛出它。你需要挑出 SortedList 类型的数据(看我的回答)。
  • 好的,看CoderNinja的评论,这个SortedLinkedList是BasicLinkedList的子类吗?如果是这样,那么SortedLinkedList中被覆盖的方法应该抛出异常。这与T的类型无关。
  • 是的,这就是我最初所拥有的,但我正在对其进行一些测试(例如,我有一个 sortedLinkedList 的实例)并且我调用了 s.addToFront();它在代码中产生了一个错误,我认为我执行错了。猜猜这就是我应该做的
【解决方案2】:

你可以把你的代码改写成这样

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?或通过异常本身,比如当你得到所有这些红色废话时)。
猜你喜欢
  • 2022-01-22
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2014-09-13
  • 2011-11-05
  • 2014-11-28
  • 2014-09-21
相关资源
最近更新 更多