【问题标题】:Why is inheritedDoc not defined on constructors? [closed]为什么没有在构造函数上定义inheritedDoc? [关闭]
【发布时间】:2013-01-28 17:31:43
【问题描述】:

我想知道 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 这样做?

【问题讨论】:

标签: java documentation javadoc


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      哦,顺便说一句,这里有一个 2003 年的 feature request ;)

      【讨论】:

      • 基于同样的理由,如果我要重写一个方法,那么我必须在父类方法的行为中添加(或修改)一些东西。但后来我仍然得到@inheritedDoc 可用于覆盖的方法。
      • @ShivaKumar 我开始说这不是一个很好的理由 ;) JonSkeet 做了一个更黑白的区别:构造函数不是继承的,故事结束
      【解决方案4】:

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

      因为 Java 中没有继承构造函数,所以 forced 在子类中复制构造函数。复制已经够多了,但现在因为 JavaDoc,您也不得不复制文档。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-06
        • 2016-09-19
        • 2010-11-16
        • 1970-01-01
        • 2011-10-19
        • 2019-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多