注释没有实现的方法

Annotating methods with no implementation

为了编写干净漂亮的代码,我一直在寻找一个问题的答案,这个问题在记录我的最新项目时突然出现。

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

已弃用的注释在这里是否合适?有没有更合适的选择?还是将这些继承的方法保留下来而没有适当的实现,即使被认为已过时,也被认为是一种不良做法。

感谢您抽出宝贵的时间以及您可能提供的任何反馈。 谢谢, -贾斯蒂斯

@deprecated 注释的存在是为了通知用户将来会删除某些方法。不立即删除它们的唯一原因是它会破坏现有代码。 就您而言,您似乎在滥用继承权。从 class 扩展而不实现预期的行为是一种代码味道,称为 Refused Bequest

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

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

The API is dangerous (for example, the Thread.stop method).

There is a simple rename (for example, AWT Component.show/hide replaced by setVisible).

A newer, better API can be used instead.

The deprecated API is going to be removed.

所以在你的方法上加上 @Deprecated 注释实际上是完全正确的。请务必添加 Javadoc @deprecated 标签以解释您的推理,并说明该方法当前不打算删除。

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

@Deprecated(forRemoval=true)

该功能称为 Enhanced Deprecation

可以在 to 中找到更多详细信息。