gpt4 book ai didi

java - 了解 UnsupportedOperationException

转载 作者:搜寻专家 更新时间:2023-11-01 03:59:49 26 4
gpt4 key购买 nike

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

例如,我正在实现 Future<T>接口(interface)并且不希望任何人调用该方法:

Future#get(long, TimeUnit) .

那么,我可以直接扔掉 UnsupportedOperationException 吗? ?

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

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

throws to indicate that the requested operation is not supported.

Class UnsupportedOperationException

我的意思是,如果您不希望它被调用或者它可能被认为是不正确的,因为不是所有的方法都已经实现,那么抛出它是否很常见?在我的具体情况下,我认为调用该方法没有意义...

最佳答案

从技术上讲,UnsupportedOperationException 是未经检查的,因此可以在您喜欢的任何地方抛出。但是扔在意想不到的地方会导致你的类不太好用,不推荐。

预计会抛出UnsupportedOperationException的地方在“可选操作”中。 Java 框架包含大量此类内容,尤其是在 Collections 框架中。例如"add" is an optional operation ,因为不可变集合不应该允许它。如果您不想编写这些方法之一,那么抛出 UnsupportedOperationException 正是您应该做的。

在您的情况下,定时“get”对于使用 Future 来说是非常基础的,如果您不实现它,您会感到有些意外。如果你打算这样做,请确保它有完整的文档,并注意这将导致你的 Future 实现在某些情况下无法使用,并可能导致使用它的程序崩溃。

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

关于java - 了解 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com