注释没有实现的方法

时间:2017-01-14 19:29:37

标签: java deprecated conventions obsolete

为了清晰美观的代码,我一直在寻找一个问题的答案,这个问题出现在我的最新项目中。

通常,会有一个抽象类或接口,需要实现的方法;偶尔,继承这些方法的类还有其他特定的和唯一的方法,这些方法使得那些继承的方法过时,因此从未引用过。 为了避免在没有使用功能的情况下添加功能,我将这些过时的继承方法留空,并评论它们为何如此。 尽管如此,我觉得我应该做的更多,但除了给它不推荐的注释之外,我无法得到答案。 这将确保任何尝试使用该方法的人都会意识到它不受支持,因此要么使用更合适的类特定替代方案,要么添加实现。 但是,我一直认为已弃用的注释仅属于一度支持的内容,并且计划将其删除。在我的情况下,内容从未得到支持,并且不打算删除。

此处弃用的注释是否合适?有更合适的选择吗?或者,如果没有适当的实施,将这些遗留的方法留下来是不合理的做法,即使被认为是过时的。

感谢您的时间以及您可能提供的任何反馈。 谢谢, - Justis

2 个答案:

答案 0 :(得分:1)

存在@deprecated注释,以通知用户将来会删除某些方法。不立即删除它们的唯一原因是它会破坏现有代码。 在你的情况下,似乎你可能滥用继承。从类扩展而不实现预期的行为是代码气味,称为拒绝遗赠 What is a Refused Bequest?

答案 1 :(得分:0)

正如 NickL 所指出的那样,您的继承方法听起来很奇怪。但是,我想清除关于弃用的误解。

许多开发人员认为,弃用API意味着宣布将其删除,但这并不是唯一的用例(如Java 7Java 9的相关文章中所述):

  

API很危险(例如Thread.stop方法)。

     

有一个简单的重命名(例如,将AWT Component.show/hide替换为setVisible)。

     

可以使用更新更好的API。

     

已弃用的API将被删除。

因此,将@Deprecated注释放在您的方法上实际上是完全正确的。还要确保添加Javadoc @deprecated标签,并附上您的解释,并提及该方法当前不打算删除。

如果您对其中一种方法改变了主意,或者想要删除它们而打算弃用其他方法,请在@deprecated Javadoc标记中提及。如果您使用Java 9及更高版本,则还应该将新的forRemoval标志设置为true(默认标志为false):

@Deprecated(forRemoval=true)

该功能称为Enhanced Deprecation

可以在my answerJava Deprecated APIs and SupressWarning "deprecation" - practical approach中找到更多详细信息。