如何将Java方法声明或标记为已弃用?


284

我想使我的一种方法“不赞成使用” =不再使用。

但是我仍然想在我的API中使用它。我只想向使用该方法的任何人显示“警告”。

我该如何实现?


10
@Deprecrated不是您的选择吗?
templatetypedef

18
是的,但是我不知道...这就是为什么我问这个问题:)
Pavel Janicek'1


4
评论不是答案的地方!
mattumotu 2015年

Answers:


577

@Deprecated在方法上使用。不要忘记澄清javadoc字段:

/**
 * Does some thing in old style.
 *
 * @deprecated use {@link #new()} instead.  
 */
@Deprecated
public void old() {
// ...
}

2
您如何链接外部库?例如:com.hello.api.PublicController#new
Faizan Kazi

@LinuxLars完全同意!Java 9添加了两个属性以开始认真对待弃用,但是添加了另一个属性reason,其默认值""不会受到损害
asgs

3
我希望@deprecated可以将评论中的消息添加到@Deprecated(修复所有问题的一个地方)...
U. Windl

88

同时使用@Deprecated注释和@deprecatedJavaDoc标签。

@deprecatedJavadoc标记被用于文档目的。

所述@Deprecated注释指示编译器,该方法已被弃用。这是Sun / Oracles文档中有关该主题的内容:

使用@Deprecated注释不赞成使用类,方法或字段,可以确保当代码使用该程序元素时,所有编译器都将发出警告。相反,@deprecated尽管Sun编译器当前这样做,但不能保证所有编译器都将始终基于Javadoc标记发出警告。其他编译器可能不会发出此类警告。因此,@Deprecated依靠@deprecatedJavadoc标记,使用注释生成警告更加可移植。

您可以在如何以及何时弃用API中找到完整的文档。


1
不太正确。javadoc和批注告诉编译器方法均已弃用
Bohemian

17
@波希米亚其实那不是真的。注释在Java语言规范9.6.1.6部分(java.sun.com/docs/books/jls/third_edition/html/…)中定义,而javadoc标记未定义。因此,注释是语言的一部分。如果决定编写自己的Java编译器,则可以忽略javadoc标记,但是必须识别注释。
ShaMan-H_Fel 2012年

@ ShaMan-H_Fel我相信javadoc模型也可以。因为它是Java 5之前的唯一选择,所以它确实起作用。当使用@deprecatedjavadoc标记(在Java 4-中)标记方法时,编译器将方法(类,字段)标记为已弃用,即使没有可用的源,IDE也显示警告。
阿米尔·帕沙扎德

42

因为缺少一些小的解释

@Deprecated在这样的方法上使用注释

 /**
 * @param basePrice
 * 
 * @deprecated  reason this method is deprecated <br/>
 *              {will be removed in next version} <br/>
 *              use {@link #setPurchasePrice()} instead like this: 
 * 
 * 
 * <blockquote><pre>
 * getProduct().setPurchasePrice(200) 
 * </pre></blockquote>
 * 
 */
@Deprecated
public void setBaseprice(int basePrice) {
}

记得解释一下:

  1. 为什么不再推荐这种方法。使用时会出现什么问题。提供有关此问题的讨论的链接(如果有)。(请记住,为了便于阅读,请分开行<br/>
  2. 何时将其删除。(让您的用户知道,如果他们决定坚持旧方法,他们仍然可以在多大程度上依靠此方法)
  3. 提供解决方案或链接到您推荐的方法 {@link #setPurchasePrice()}

应该不是<br/>而不是</br>吗?
argh1969 '18 -10-29

@ argh1969,对!不记得那时我从哪里得到的模板。但是我可以确认两个版本都可以。虽然我正在编辑支持标准。
azerafati

37

您可以做两件事:

  1. 添加 @Deprecated注释到方法中,然后
  2. @deprecated标记添加到方法的javadoc

你们两个都应该

引用有关此主题的Java文档

从J2SE 5.0开始,通过使用@Deprecated批注来弃用类,方法或字段。另外,您可以使用@deprecated Javadoc标记告诉开发人员要使用的内容。

使用注释会导致Java编译器在使用不赞成使用的类,方法或字段时生成警告。如果弃用的编译单元使用了弃用的类,方法或字段,则编译器将禁止弃用警告。这使您可以构建旧版API,而不会生成警告。

强烈建议您将Javadoc @deprecated标记与适当的注释一起使用,以解释如何使用新的API。这确保开发人员将拥有从旧API到新API的可行迁移路径。


这意味着注释外,强烈建议使用javadoc 注释,而不是替代注释!这就是为什么最好同时放两个。
morellet.d 2013年

@ morellet.d感谢您指出这一点。我现在基本上已经重写了我的答案(我没有足够仔细地阅读文档!)。干杯
波希米亚风格


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.