特别是在这些情况下是否使用标准的Exception子类?

评论

当类不实现方法但子类可以实现方法时,是否适合使用?换句话说,要在非抽象类中使用抽象方法。

@SergeyOrshanskiy在以下情况下很有用:根据构造对象的方式,需要创建一个实现接口的匿名类以实例化成员变量,但又不想使用它。如果将其设置为null,并且不小心使用了它(或其他人使用了它),则会得到NullPointerExceptions,在这种情况下,它比UnsupportedOperationExceptions不那么明显。只是一个例子。

#1 楼

java.lang.UnsupportedOperationException


抛出该异常以指示请求的操作不受支持。


评论


@JarrodRoberson好的,在那种情况下,该语句实际上应该从类文档中删除。似乎其他软件包确实使用了该异常。我想如果Oracle这样做了,那我们也应该这样做。我将提交错误报告。

–马滕·博德威斯(Maarten Bodewes)
16年7月7日在18:14

请注意,这是未经检查的RuntimeException。在编译期间,您将不会获得任何反馈或帮助来处理这些异常。如果此方法用于存根方法或正在进行的工作,则应使用某种已检查的异常。

– TastyWheat
19年2月8日在18:58

#2 楼

请区分您所命名的两种情况:


要表明请求的操作不受支持并且很可能永远不会支持,请抛出UnsupportedOperationException

以表明请求的操作尚未实现,请在以下选项中进行选择:


使用apache commons-lang中的NotImplementedException,它在commons-lang2中可用,并已重新添加到commons-lang3中。版本3.2。
实现自己的NotImplementedException
UnsupportedOperationException抛出类似“尚未实现”的消息。





评论


我要这样做,因为在我看来这是合理的。异常指示的“还”或“从不”给出了如何应对的想法。

– sschrass
16年2月16日在9:16

在实践中,#s 1或2非常可取。 #3确实捕获了“不支持”和“未实现”之间的语义区别,但是拥有一个单独的类可以使快速搜索更容易,以验证提交之前没有忘记实现任何应做的事情。

– Sean U
17年9月2日在12:53

#3最适合未实现的方法,因为它不需要第三方库或进行其他工作,即使它是commons-lang。

– JoshDM
18年7月18日在22:55

#3 楼

如果您在NetBeans中创建一个新的(尚未实现的)函数,则它将生成带有以下语句的方法主体:

throw new java.lang.UnsupportedOperationException("Not supported yet.");


因此,我建议使用UnsupportedOperationException 。

#4 楼

如果您想获得更高的粒度和更好的解密效果,可以使用commons-lang

中的NotImplementedException警告:仅在2.6版之前和3.2版之后可用。