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} 的:)
有什么建议吗?
答案 0 :(得分:1)
问题类似于界面文档。客户端将使用抽象,并将主要看到抽象的通用文档。在您的情况下,您可以做的最好的事情是将文档添加到每个具体类的构造函数中。至少通过这种方式,客户端将看到实施的详细信息,如果需要,您可以包含相关的@link
和@see
。