Java 理解不支持操作异常

Java 理解不支持操作异常,java,exception,interface,Java,Exception,Interface,我不知道;我不太明白在哪里可以抛出这个异常 例如,我正在实现Future接口,不希望任何人调用该方法: 那么,我可以抛出不支持操作异常吗 public T get(long timeout, TimeUnit unit){ throw new UnsupportedOperationException(); } 问题是,该方法的规范没有说明任何关于抛出异常的内容。反过来,例外情况也是如此 抛出以指示不支持请求的操作 我的意思是,如果你不想调用它,抛出它是很常见的,还是因为不是所有的

我不知道;我不太明白在哪里可以抛出这个异常

例如,我正在实现
Future
接口,不希望任何人调用该方法:

那么,我可以抛出
不支持操作异常吗

public T get(long timeout, TimeUnit unit){
    throw new UnsupportedOperationException();
}
问题是,该方法的规范没有说明任何关于抛出异常的内容。反过来,例外情况也是如此

抛出以指示不支持请求的操作


我的意思是,如果你不想调用它,抛出它是很常见的,还是因为不是所有的方法都实现了,所以可能会被认为是不正确的?在我的具体案例中,我认为调用该方法没有意义…

当您希望方法的调用者知道该操作不受支持时,您可以抛出UnsupportedOperationException

您可以检查:

此异常扩展了RuntimeException类,因此属于 在Java操作期间可以抛出的异常 虚拟机(JVM)。这是一个未经检查的异常,因此它确实存在 不需要在方法或构造函数的抛出中声明 条款此外,自 Java的1.2版本

从技术上讲,UnsupportedOperationException是未经检查的,因此可以抛出到任何您喜欢的地方。然而,将它扔到意想不到的地方会导致您的类不太容易使用,因此不推荐使用

预期将抛出UnsupportedOperationException的位置在“可选操作”中。Java框架包含了大量的这些,特别是在Collections框架中。例如,因为不可变集合不应该允许它。抛出UnsupportedOperationException正是如果您不想编写其中一个方法时应该做的事情

在您的情况下,定时“get”对于Future的使用非常重要,如果您不实现它,您将引起一些惊讶。如果您要这样做,请确保它有良好的文档记录,并注意这将导致您的Future实现在某些情况下无法使用,并可能导致使用它的程序崩溃

如果您没有足够的资源来编写实现未来的定时GET,请考虑使用已经存在的实现,例如从未来任务扩展类。

是的,您是正确的。

UnsupportedException的作者是Joshua Bloch,根据他的书,如果对象不支持操作,该方法可以抛出UnsupportedException

在方法中引发此异常之前应注意,因为它属于RuntimeException/unchecked exception类型

这本书的作者和不受支持的异常类约书亚·布洛赫

/**
 * Thrown to indicate that the requested operation is not supported.<p>
 *
 * This class is a member of the
 * <a href="{@docRoot}/../technotes/guides/collections/index.html">
 * Java Collections Framework</a>.
 *
 * @author  Josh Bloch
 * @version %I%, %G%
 * @since   1.2
 */
public class UnsupportedOperationException extends RuntimeException {
     ...
}
/**
*抛出以指示请求的操作不受支持。
*
*这个类是
* .
*
*@作者Josh Bloch
*@version%I%,%G%
*@自1.2
*/
公共类UnsupportedOperationException扩展了RuntimeException{
...
}

是的,您的示例是使用
UnsupportedOperationException
的典型扫描。重点是让调用方知道该操作不受支持:如果有抛出的示例,我认为这取决于您自己的判断。我只想确保包含一些文档,说明抛出它的原因。很好,但我在JavaDocs中看到(不记得确切位置)不需要实现某些操作(方法)。我认为这是我们可以抛出它的唯一案例。看看JDKLet中的
AbstractList
示例,我问你一些。这是来自有效的Java吗?如果是,你引用了哪一部分?是的。它来自于有效的Java书籍,也是如何使用Java语言的最佳书籍,喜欢的好部分。这是第9章的例外。