20

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

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

4 回答 4

16

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

大概是构造函数不是继承的事实。虽然它们通常最终具有与超类中的构造函数相同的参数(具有相同的含义),但它与方法之间的关系并不那么清晰。

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

于 2013-02-13T08:11:48.680 回答
11

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

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);
    }

    ...
}
于 2014-03-10T15:44:31.023 回答
7

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

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

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

哦,顺便说一下,有一个2003 年的功能请求;)

于 2013-02-13T08:11:26.810 回答
5

这只是 JavaDoc 的一个限制。就像Miquel 指出的那样,它有一个功能要求,但 10 年来没有人费心去实现它。纯粹的懒惰,我说。

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

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

于 2013-02-13T12:49:34.850 回答