我应该在Java中使用JavaDoc弃用还是注释?

cor*_*ath 74 java annotations javadoc deprecated

目前,有两种方法可以将代码标记为java中的depreacted.

通过JavaDoc

/**
 * @deprecated
 */
Run Code Online (Sandbox Code Playgroud)

或者作为注释:

@Deprecated
Run Code Online (Sandbox Code Playgroud)

这是我的问题 - 当使用Eclipse将方法标记为已弃用时,我发现声明两者都有点太多了.我真的只想用其中一个.

但是,使用注释会给编译器提供实际有用的附加信息吗?

但是只使用注释,我无法说明为什么该方法被弃用 - 我只能用JavaDoc做到这一点,并且弃用方法而不指出为什么不好.

那么,我可以只使用其中一个吗?或者我应该真的学会指定两者?

Raw*_*ing 71

你应该同时使用两者.Annotation允许编译器在使用不推荐使用的方法时显示警告,并且javadoc解释了原因.两者都很重要.

根据Oracle的Java Annotations 教程:

不推荐使用元素时,还应使用Javadoc @deprecated标记对其进行记录...

  • 但是,Oracle编译器也会显示javadoc标记的警告,因此实际上并不需要注释. (5认同)
  • @MichaelBorgwardt我理解你的想法,但过多的这一点最终导致"不管怎么写文档,因为你只能信任源代码".javadoc注释确实有用,例如,它是唯一可以指示用户"使用此替换"的地方. (3认同)
  • 阿门埃德温.需要2个符号的事实很糟糕. (3认同)

Mic*_*rdt 37

马的嘴里:

注意:Java语言规范要求编译器在使用标记有@Deprecated注释的类,方法或字段时发出警告.虽然Sun编译器目前这样做,但是当访问标记有@deprecated Javadoc标记的类,方法或字段时,Java语言规范不要求编译器发出警告.

所以基本上,如果你想保证会有编译器警告,你需要使用注释.而且由于某些API设计师令人窒息的无能,您还需要指定javadoc标签以进行解释.

就个人而言,我会说注释是无用的,在修复之前应该省略,因为任何好的编译器或IDE都会显示带有javadoc标记的警告.

  • @jwenting,寻找文档是浪费人类的时间.如果发生了令人担忧的事情,让机器弄明白并告诉你.那是他们的工作. (12认同)
  • 我想最好的事情是,如果@Deprecated注释可以支持字符串'value',它可以接受为什么弃用已经到位的解释.解释似乎是使用javadoc方式而不是注释本身的唯一原因. (8认同)
  • "因为任何好的编译器或IDE都会显示带有javadoc标记的警告." 任何体面的程序员都不会依赖编译器来告诉他有关弃用的内容,他会查找新的或更改过的API的文档. (3认同)
  • @jwenting:好的,但是特定的API如何被弃用是基础知识的一部分?编译器警告如何指示在代码体中使用已弃用的API"对程序员的意图有预测性"? (3认同)
  • @jwenting我不同意.注释和javadoc是程序员"了解"API的一种方式.这是一种有效的文档形式.只要有可能,程序员应该使用他/她的智力来思考有趣的东西,而不是从谁知道在哪里找到文档. (2认同)
  • @jwenting:你不是那个说"任何体面的程序员[...]寻找文档"的人吗?除了现有的代码呢?您的超级程序员如何处理已弃用的API,但在此之前编写的代码中可能会使用也可能不会使用?你在这里的陈述接近于愚蠢. (2认同)

Dun*_*ril 5

你应该指定两者.

注释允许编译器了解它并在使用该方法时触发警告.JavaDoc属性允许开发人员在开始使用它之前了解它.

这是两个非常不同的东西!

  • 这些根本不是什么不同的东西.如果注释允许将解释作为参数,那么也可以向开发人员显示. (6认同)
  • 不,我的回答强调仍然需要javadoc标签,因为注释设计得很糟糕.注释是开发人员的代码元数据和信息,就像方法sigantures一样. (5认同)
  • 需要2个标签是愚蠢的.注释不应该存在,因为没有文档它旁边就没有价值.事实上,现在我想知道为什么这个特别的东西被标记为已弃用.没有@Deprecated javadoc标签,所以我不知道.这很糟糕.它几乎比什么都糟糕,因为有人在某个时候说"不要使用它",但不是为什么.敦促扼杀上升. (2认同)

Mar*_*cel 5

您应该两者都写。@Deprecated注释用于编译器,而@deprecated JavaDoc标记用于希望现在为什么不建议使用此方法的人员。

一个示例如下所示:

/**
* @deprecated We dont need this Method because ...
*/
@Deprecated
public void doStuff(){..}
Run Code Online (Sandbox Code Playgroud)

  • 对于编译器?编译器只关心向开发人员发出警告,因此它们都是针对开发人员的。只是注释本身几乎没有用,而不能保证使用javadoc注释。因此,Sun / Oracle(我不知道这是谁的监视对象)设置了一种情况,开发人员必须做两件不同的事情才能充分记录该情况,而本来应该足够。 (2认同)