getter和setter方法的Java注释

getter和setter方法的Java注释,java,comments,Java,Comments,我的问题是我是否应该这样评论: /** * Getter for {@link #auto_key} * @return {@link #auto_key} */ public String getAuto_key() { return auto_key; } /** * Setter for {@link #auto_key} * @param auto_key the {@link #auto_key}

我的问题是我是否应该这样评论:

/**
     * Getter for {@link #auto_key}
     * @return {@link #auto_key}
     */
    public String getAuto_key() {
        return auto_key;
    }
    /**
     * Setter for {@link #auto_key}
     * @param auto_key the {@link #auto_key} to set
     */
    public void setAuto_key(String auto_key) {
        this.auto_key = auto_key;
    }
基本上我想问,在getter和setter方法的comment中使用{@link}是正确的吗?或者我应该使用普通注释而不使用{@link}?
这种方式是否是java标准

惯例问题。不同的组织不同。以前,我们被要求不要费心去评论“得者”和“二传者”,只要它们的作用是显而易见的。这与不带
{@link}
的注释相同


目前,我们添加了
{@link}
,因为前面编写的代码已经有了这个约定。

实际上,我故意不使用javadoc getter和setter,因为这样做并没有增加任何价值-它们就是它们。。。访问器方法。事实上,通过向它们添加javadoc,您将创建一种代码膨胀


我只将javadoc放在非getter/setter上。

如果您可以在文档中使用
{@link}
引用
#auto_key
,这意味着该变量是公共可访问的(否则,该链接将无法在javadoc中解析)。这意味着getter和setter是冗余的

我强烈建议将您的
自动密钥
字段设置为私有,并保留getter和setter。然后调整getter和setter的名称以匹配Java约定(
autoKey
setAutoKey
getAutoKey
)。并考虑当<代码>自动键< /C> >(作为一个GETT/SETER组合典型地建议——见)时,请考虑开机<代码> PrimeTyrEngEngult< /代码> S。 至于您的文档:它没有给方法的名称所暗示的内容添加任何新内容。因此,我将删除它,或者添加一些额外的文档说明
自动键的确切功能(我从代码段中不清楚),是否可以将其设置为
null

  • 我建议为set/get方法生成独立的文档,同时仍然使用
    {@link}
    ,这两种方法都可以。这样,当字段可访问时,人们仍然可以访问它的文档。如果之后它由于重构而成为私有的,那么您就不会得到一堆需要修改的不完整的javadoc

  • 尽管setter/getter方法的文档可能看起来像是代码膨胀,但出于以下几个原因,我仍然建议创建它:

    • 它为您提供了一个提及重要信息的标准位置,例如不应为
      null
      的setter参数或在接口的特定实现中效率极低的getter

    • 它并不假定读取器自动知道支持字段的作用。当然,
      setLength()
      在某些上下文中可能足够具有描述性,但是
      setLimit()
      到底做什么呢

    • 它并不假定存在支持字段,也不假定get/set方法仅在特定实现中这样做。不幸的是,当重构受到兼容性问题的约束时,各种工件都被抛在了后面。例如,
      setLimit()

    • 它消除了任何和所有的歧义。你认为常识是不可能对所有人都直截了当的。在没有文件的情况下,将做出各种可能真实或不真实的假设。例如,在列表实现中,
      setLength(0)
      是否也将所有包含的引用设置为
      null

    • 最重要的是,它允许Javadoc策略归结为一个简单的“处处记录一切”。另一方面,拥有一个包含各种例外情况的政策,将不可避免地导致宽松和代码最终无法记录


  • 您不应该放置任何描述getter或setter的注释,除非该方法看起来像getter或setter,但封装了不同的行为

    访问器和变异器是类中应用封装概念(即具有私有实例属性)的通用方法。这就是为什么在某些IDE(例如Netbeans)中,它们甚至可以自动生成

    此外,根据惯例,它们的名称非常明确地说明了它们所做的事情,因此可以将它们与其他更特定于业务需求的方法区分开来

    所有这些都表明它们不需要记录。

    当然,如果在应用程序的上下文中,您在>设置程序中添加了一条特定的指令,例如,根据您的需要和程序的逻辑,在我看来,没有什么可以阻止您向其添加描述性注释行


    我同意为
    getX()
    记录“X getter”是无用的。不过,记录为什么应该使用“X”可能会很有趣。@eric我认为,如果您需要记录字段是什么,那么您对它的命名还不够好。getter返回的内容应该是非常明显的。使用Lombok(如果你不这么做,你会很生气)不允许访问器上有任何javadoc,这意味着你必须很好地命名字段。不是“setter是什么”,而是“why”应该设置为这个或那个值。我会认真看看龙目山的,谢谢。@eric你说为什么是什么意思?二传手没有“为什么”;你只是给一个字段赋值。例如调用
    customer.setName(“约翰·史密斯”)的原因是“我想将客户的名字设置为John Smith”。如果您指的是记录将字段设置为特定值的效果,例如
    car.setCruiseControlKph(100)
    ,那么该字段的名称也应该告诉您将其设置为特定值的效果。如果要为值添加含义,请使用命名良好的枚举或参数对象。我坚信访问者永远不应该需要javadoc