java 注解接口、实现或两者?

qyzbxkaa  于 2023-04-10  发布在  Java
关注(0)|答案(9)|浏览(136)

我想我们都(当我们可以被打扰的时候!)评论我们的界面。

/// <summary>
/// Foo Interface
/// </summary>
public interface Foo
{
    /// <summary>
    /// Will 'bar'
    /// </summary>
    /// <param name="wibble">Wibble factor</param>
    void Bar(string wibble);
}

你是否也对实现进行注解(也可能提供给客户端,例如作为库的一部分)?如果是,你如何保持两者同步?或者你只是添加一个“查看文档界面”注解?

3mpgtkmj

3mpgtkmj1#

作为一般规则,我使用与代码相同的DRY(不要重复自己)原则:

  • 在接口上,记录接口
  • 实施时,记录实施细节
    Java专用:在记录实现时,使用{@inheritDoc}标记从接口“包含”javadoc。

更多信息:

  • 官方javadoc文档
  • 一些非官方的advice
rur96b6h

rur96b6h2#

C#用法:
接口可以看起来像这样:

/// <summary>
    /// Helper class to access various properties for the current site.
    /// </summary>
    public interface ISiteHelper
    {
        /// <summary>
        /// Gets the site id of the current site
        /// </summary>
        /// <returns>The site id.</returns>
        int GetSiteID();
    }
}

实现可以看起来像这样:

/// <inheritdoc />
public class SiteHelper: ISiteHelper
{
    public int GetSiteID()
    {
        return CommonRepository.GetSiteID();
    }
}

<inheritdoc />的官方参考:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags#inheritdoc

1szpjjfi

1szpjjfi3#

仅接口。注解两者是重复的,如果代码发生更改,两组注解最终可能会失去同步。使用“implements MyInterface”注解实现...... Doxygen之类的东西将生成文档,这些文档将派生的文档包含到实现的文档中(如果您正确设置了它们)。

rta7y2nd

rta7y2nd4#

如果您使用GhostDoc插件,当您右键单击并选择方法上的“DocumentThis”时,它会使用来自接口的注解更新实现。

iecba09b

iecba09b5#

对于C#,它取决于IMO:如果你使用显式的接口实现,那么我就不会记录实现。
但是,如果您直接实现接口并使用对象公开接口的成员,那么这些方法也必须记录下来。
正如Nath所说,你可以使用GhostDoc自动将接口的文档插入到实现中。我将Document This命令Map到Ctrl+Shift+D快捷键和它的一个按键,我几乎自动按下。我相信ReSharper也可以选择插入接口的文档,当它为你实现方法时。

hts6caw3

hts6caw36#

注解接口应该是足够的文档来弄清楚如何使用实际的实现。唯一的一次,我会添加注解的实现是,如果它有私人的功能,插入,以满足接口,但他们将是内部唯一的评论,不会看到在线文档或提供给客户端。
实现就是这样,只要它们符合接口,就没有必要单独记录它们。

i7uaboj4

i7uaboj47#

我们只是注解了接口,注解很容易与派生类或基类/接口不同步,所以把它放在一个地方很好。
虽然看起来@Nath可能会建议使用一个自动化文档工具来帮助将所有东西放在一起(如果您使用它,听起来很酷)。

b4qexyjb

b4qexyjb8#

你当然可以同时注解这两个接口,但是你会遇到维护这两个接口的问题(如前所述)。然而,在这个时代,任何消费代码真的不使用IoC/DI而不使用接口吗?考虑到这一点,如果你只想注解一个接口,我强烈建议你注解接口。这样代码的消费者将更有可能得到很好的智能提示。

vzgqcmou

vzgqcmou9#

我创建了一个对XML文档文件进行后处理的工具,以添加对标记的支持。
虽然它对源代码中的Intellisense没有帮助,但它允许将修改后的XML文档文件包含在NuGet包中,因此可以在引用的NuGet包中使用Intellisense。
它位于www.inheritdoc.io(免费版本可用)。

相关问题