当前位置: 首页 > 知识库问答 >
问题:

理解不支持操作异常

史淳
2023-03-14

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

例如,我正在实现Future

Future#get(长,时间单位)。

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

public T get(long timeout, TimeUnit unit){
    throw new UnsupportedOperationException();
}

问题是,该方法的规范没有说明任何关于抛出异常的内容。反过来,例外情况也是如此

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

类不支持操作异常

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


共有3个答案

杜俭
2023-03-14

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

您可以在这里查看:

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

唐永春
2023-03-14

是的,你是对的。

UnsupportedException的作者是Joshua Bloch,根据他的书以及Collections design FAQ,如果对象不支持操作,该方法可以抛出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 {
     ...
}
穆景辉
2023-03-14

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

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

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

如果您根本没有资源为Future的实现编写定时获取,请考虑使用已经存在的实现,例如从FutureWork扩展类。

 类似资料:
  • 相反,将引发“UnsupportedOperationException”。看起来ContainerRequest没有从修改的请求中提取UserPrincipal。 修改是通过 问题是如何将主体信息从HttpServerProbe传输到ContainerRequestFilter。request具有安全信息(在本例中是SSL客户机证书信息),而com.sun.jersey.spi.containe

  • 下面是在strList5的subList.clear()调用中引发异常的代码: 我清除子列表的方式有问题吗?或者这是8Java的臭虫?我的Java8在Mac上的版本是:java版本"1.8.0_45"Java(TM)SE运行时环境(构建1.8.0_45-b14)JavaHotSpot(TM)64位服务器VM(构建25.45-b02,混合模式)

  • 我想从excel(.xlsx)文件中读取超过60万行。 我使用的是ApachePOI和xlsx拖缆。 Apache poi版本为3.15,因为xlsx streamer在上述版本中不支持 我只想迭代特定的列。我尝试过的是: 我得到这个例外,几乎没有警告 第35行是

  • 我正在使用sql server进行数据库连接。并且我希望在运行多个结果集时保持结果集打开。我使用了,但在执行语句时出现以下错误, 由于我是使用sql server的新手,所以我对其中的一些概念还不是很了解。如果有人知道为什么会这样请回答我。

  • 问题内容: 电子邮件验证 我想知道为什么我的数据不会写入磁盘。Python说我的操作不受支持。 问题答案: 您以只读方式打开变量“文件”,然后尝试对其进行写入: 相反,请使用“ w”标志。

  • 作为测试的一部分,我一直在尝试创建一个用户,然后将其删除,但我不断收到相同的错误组织。冬眠hql。内部的QueryExecutionRequestException:即使在我的存储库和控制器中不断更改代码之后,DML操作也不受支持。 这是我的存储库中的代码: 这是我的控制器中的代码: