为什么在构造函数上没有定义inheritedDoc?

时间:2013-02-13 08:06:25

标签: java documentation javadoc

我想知道javadoc不支持constructors上的inheritedDoc是否有任何正当理由。假设我有

class A
{
/**
 * Constructor of A
 */
A(){}   

/**
 * Does something
 */
public void method(){}
}

class B extends A
{
/**
 * {@inheritDoc}
 */
B(){ super();}

/**
 * {@inheritDoc}
 */
public void method(){}
}

对于方法method,我可以继承javadoc,但为什么同样不能应用于constructors?除非我使用inheritDoc标记,否则javadoc不会继承,这意味着我很清楚我想重用文档。什么应该阻止我这样做constructors

4 个答案:

答案 0 :(得分:14)

  

什么应该阻止我为构造函数这样做?

据推测,构造函数不是继承的。虽然它们经常最终具有与超类中的构造函数相同的参数(具有相同的含义),但它与方法的关系并不是那么明确。

我可以看到实用价值,但同样我可以看到为什么实际上没有继承的东西不应该有@inheritDoc。如果您可以专门继承文档的 bits ,那将是很好的 - 例如,如果您要将参数值直接传递给超类构造函数,那么能够有效地链接到那份文件......

答案 1 :(得分:8)

我喜欢使用以下符号来解决此问题:

public class TestReflectionHelper extends TestReflectionHelperCommon {

    /**
     * @see TestReflectionHelperCommon#TestReflectionHelperCommon()
     */
    public TestReflectionHelper() {
        super();
    }

    /**
     * @see TestReflectionHelperCommon#TestReflectionHelperCommon(Class, String,
     *      Class...)
     */
    public TestReflectionHelper(final Class<?> targetClass,
            final String targetMethod, final Class<?>... parameterTypes) {
        super(targetClass, targetMethod, parameterTypes);
    }

    ...
}

答案 2 :(得分:6)

嗯,这不是一个很好的理由,但这是我的理解:

如果您实现了一个接口或覆盖一个方法,那么您实际上是在实现其他地方(在接口或超类中)描述的内容,并且您很可能没有任何东西要添加到前面的描述中,所以你得到了@inheritDoc工具让您只重复使用该文本(如果需要,还可以添加到该文本中)。

另一方面,构造函数是另一种动物:如果它正在创建接口的实现,那么必须有一个原因,即该实现与另一个实现不同。如果要创建继承类,则必须添加要添加到父类的内容。

哦,顺便说一下,从2003年开始有一个feature request;)

答案 3 :(得分:3)

这只是JavaDoc的一个限制。与Miquel pointed out一样,有一个功能请求,但在10年内没有人愿意实施它。我说,纯粹的懒惰。

因为构造函数不是在Java中继承的,所以你forced复制子类中的构造函数。这已经足够复制了,但现在因为JavaDoc,你也被迫复制文档。

一个好的文档工具可以帮助您消除重复,就像一个好的编程语言一样。