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

时间:2015-06-17 11:46:58

标签: java javadoc

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...
        ...
    }
}

所以我有一个类似于这个的类层次结构。这个想法是使用public final something() - 然后是abstract - doSomething()模式,这样扩展类就有义务调用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} 的:)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题类似于界面文档。客户端将使用抽象,并将主要看到抽象的通用文档。在您的情况下,您可以做的最好的事情是将文档添加到每个具体类的构造函数中。至少通过这种方式,客户端将看到实施的详细信息,如果需要,您可以包含相关的@link@see