St.*_*rio 3 java interface exception
我不太明白我可以在哪里抛出这个异常.
例如,我正在实现Future<T>接口,并且不希望任何人调用该方法:
那么,我可以扔掉UnsupportedOperationException吗?
public T get(long timeout, TimeUnit unit){
throw new UnsupportedOperationException();
}
Run Code Online (Sandbox Code Playgroud)
事情是该方法的规范没有说什么关于抛出异常.反过来,例外
抛出以指示不支持所请求的操作.
Class UnsupportedOperationException
我的意思是,如果您不希望它被调用或者它可能被认为是不正确的,因为并非所有方法都已实现,它是否常见?在我的具体情况下,我认为调用该方法没有意义......
技术上UnsupportedOperationException未选中,因此可以在任何您喜欢的地方抛出.但是将它扔到意想不到的地方会导致你的课程不那么容易使用,不推荐使用.
预期将抛出UnsupportedOperationException的位置在"可选操作"中.Java框架包含大量这些内容,尤其是在Collections框架中.例如,"add"是一个可选操作,因为不可变集合不应该允许它.抛出UnsupportedOperationException如果您不想编写其中一种方法,则正是您应该执行的操作.
在你的情况下,定时"获取"对于使用Future非常重要,如果你不实现它会引起一些惊喜.如果你打算这样做,请确保它有详细记录,并注意这将导致你的Future实现在某些情况下无法使用,并可能导致使用它的程序崩溃.
如果您根本没有资源为Future实现编写定时get,请考虑使用已存在的实现,例如从FutureTask扩展您的类.
是的,你是对的.
UnsupportedException的作者是Joshua Bloch,根据他的书以及Collections design FAQ,如果对象不支持操作,该方法可以抛出UnsupportedException.
在将此异常抛出到方法之前应该小心,因为它的类型为RuntimeException/unchecked异常.
本书的作者和UnsupportedException类: Joshua Bloch
/**
* 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 {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5561 次 |
| 最近记录: |