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

Shi*_*mar 16 java documentation javadoc

我想知道为什么javadoc不支持inheritedDoc是有正当理由的constructors.假设我有

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

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

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

/**
 * {@inheritDoc}
 */
public void method(){}
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 14

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

大概是构造函数不是遗传的事实.虽然它们通常最终具有与超类中的构造函数相同的参数(具有相同的含义),但它与方法的关系并不是那么明确.

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


My-*_*-Is 9

我喜欢使用以下表示法来解决此问题:

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

    ...
}
Run Code Online (Sandbox Code Playgroud)


Miq*_*uel 6

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

如果您实现一个接口或重写的方法,你正在有效实施这是其他地方所描述的东西(在接口或超类),有一个很好的机会,你没有什么可以补充前面的介绍,让您得到的@inheritDoc工具让你只是重用那个文本(如果你愿意,还可以添加它).

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

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


Ren*_*soo 5

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

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

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