在抽象方法中编写javadoc的正确方法是什么

What is the correct way to write javadoc in abstract methods

public interface ISomething
    /**
     * This method does something!
     */
    public void something();
}

public abstract class AbstractSomething implements ISomething
{
    /**
     * See {@link #doSomething()}
     */
    public final void something()
    {
        doSomething();
        // Do something else...
        ...
    }

    protected abstract void doSomething();
}

public class ConcreteSomething extends AbstractSomething
{

    /**
     * Concrete implementation of doSomething(). It does... something!
     */
    @Override
    protected void doSomething()
    {
        // Actually do something...
        ...
    }
}

所以我有一个看起来像这个的 class 层次结构。这个想法是使用 public final something() - 然后是抽象 - doSomething() 模式,以便扩展 classes 将有义务调用 super(),例如 Andrzej answer's

然后,我最终会有几个扩展 AbstractSomething 的实现。此代码的客户端随后将实例化这些实现并使用 ISomething 方法。

像这样:

public class Main
{
    public static void main(String[] args)
    {
        ConcreteSomething concrete = new ConcreteSomething();
        concrete.something();
    }
}

所以问题是,使用这种设计习惯是否有正确的方法来为层次结构编写良好的 javadoc?

我所说的正确是指: 当客户调用 concrete.something() 时,我希望他们看到 ConcreteSomething#something() javadoc。但是,由于该方法是最终方法,我不能简单地覆盖它并编写一个具体的 javadoc。 此外,我的客户不会看到 doSomething() 方法,因为它是受保护的,所以我不能把具体的 javadoc 也放在那里。

换句话说,我可能需要 {@InheritDoc} 的 相反 :)

有什么建议吗?

问题类似于接口的文档。客户将使用抽象并且主要看到该抽象的通用文档。在你的情况下,你能做的最好的事情就是将文档添加到每个具体 class 的构造函数中。至少这样客户会看到实施的细节,如果需要,您可以包括相关的 @link@see