我有一个抽象类SuperClass
,它有大量的子类,每个子类都在不同的业务对象上工作,但是以类似的方式。
我需要添加一些肯定在SuperClass
中具有位置的新功能,但是它将依赖于特定于子类的属性,我需要在超类方法中获得它。这里显而易见的方法是在SuperClass
中为属性添加一个抽象getter,并让每个子类覆盖它,以便它可以在调用时发送正确的属性。
问题是:我不允许更改其他子类的代码而不是我正在处理的子代码,因为他们担心会出现回归。
所以我无法添加抽象方法,因为其他子类不再编译。
由于现在只有我正在处理的对象需要这个新功能,所以我可以在SuperClass
中声明一个标准的非抽象方法,并在那里返回null
。然后在我正在处理的子类中覆盖它,并且瞧瞧。
如果没有正确地在Javadoc中读取我的警告的人试图从另一个子类调用这个新方法,那么由于getter没有被正确覆盖,它将产生意外的结果。而不是在null
中返回SuperClass
(以及意外的结果),我认为抛出一个例外对我的其他程序员来说会更优雅和有用。
我可以定义一个自定义的例外,但是在“标准”例外中是否存在YouForgotToImplementSomethingException
或PleaseReadTheJavadocException
的某些内容?
按照答案中的建议投掷Error
并不是我非常喜欢的东西,但也许在这里模仿编译器的行为是有意义的吗?对此的想法?
答案 0 :(得分:8)
我已经看到一些使用UnsupportedOperationException的库。
抛出以指示不支持所请求的操作。
答案 1 :(得分:-2)
确切的事是java.lang.AbstractMethodError
。