Java函数注释帮助,使用@Deprecated?

场景:
Java 1.6

class Animal { private String name; ... public String getName() { return name; } ... } class CatDog extends Animal { private String dogName; private String catName; ... public String getDogName() { return dogName; } public String getCatName() { return catName; } public String[] getNames() { return new String[]{ catName, dogName }; } ... public String getName() { return "ERROR! DO NOT USE ME"; } } 

问题:
getName没有意义,不应该在这个例子中使用。 我正在阅读@Deprecated注释。 有更合适的注释方法吗?

问题:
A)使用此function时(运行前)是否可以强制执行错误?
B)有没有办法显示我将使用的注释方法的自定义警告/错误消息? 理想情况下,当用户将鼠标hover在已弃用/错误函数上时。

通常,对于已经被较新版本的软件淘汰的方法,使用@Deprecated,但是为了与依赖于旧版本的代码的API兼容性而保留这些方法。 我不确定它是否是在这种情况下使用的最佳标记,因为getName仍然被其他Animal子类主动使用,但它肯定会警告CatDog类的用户他们不应该调用该方法。

如果要在编译时使用该函数时导致错误,可以更改编译器选项,以考虑使用@Deprecated方法作为错误而不是警告。 当然,您无法保证使用您的库的每个人都会设置此选项,并且我无法根据语言规范强制编译错误。 从CatDog删除方法仍然允许客户端调用它,因为客户端将只调用超类Animal的默认实现(可能你仍然希望包含该方法)。

但是,当用户将鼠标hover在已弃用的方法上时,当然可以显示自定义消息。 Javadoc @deprecated标记允许您指定方法被弃用的原因的解释,并且当用户将鼠标hover在像Eclipse这样的IDE中的方法时,它将弹出而不是通常的方法描述。 它看起来像这样:

 /** * * @deprecated Do not use this method! */ @Deprecated public String getName() { throw new UnsupportedOperationException(); } 

(注意,您可以使该方法的实现抛出exception,以保证如果用户在编译时没有注意到@Deprecated标记,他们肯定会在运行时注意到它)。

弃用意味着该方法不应再使用,并且可能在将来的版本中删除。 基本上就是你想要的。

是的,当有人试图使用该方法时,有一个简单的方法来获取编译错误:删除方法 – 这将导致链接时出现任何试图使用它的代码的错误,通常不建议出于显而易见的原因,但如果打破向后兼容性是一个非常好的理由,这是实现它的最简单方法。 您还可以使方法签名不兼容(始终可行),但实际上最简单的解决方案通常是最好的。

如果你想在有人hover在方法上时想要一个自定义消息,请使用javadoc,这正是它的用途:

 /** * @deprecated * explanation of why function was deprecated, if possible include what * should be used. */ 

不推荐是要走的路……你也可以配置编译器将某些事情标记为错误而不是警告,但正如Edward指出的那样,你通常会弃用一个方法,这样你就不必完全清理了此时所有引用它。

在Eclipse中,要配置错误和警告,请转到窗口 – >首选项。 在Java – > Compiler – > Errors / Warnings下,您将看到Deprecated API的一个部分。 您可以选择在不推荐使用方法时指示编译器忽略,警告或错误。 当然,如果您正在与其他开发人员合作,他们必须以相同的方式配置他们的编译器。