【问题标题】:Java Documentation Override Method does not InheritDocJava 文档覆盖方法不 InheritDoc
【发布时间】:2010-11-08 01:26:29
【问题描述】:

覆盖另一个方法的方法不会继承它所覆盖的方法的文档。有没有办法明确告诉它继承文档?

/**
  * {@inheritDoc}
  * 
  * This implementation uses a dynamic programming approach.
  */
@Override
public int[] a(int b) {
    return null;
}

【问题讨论】:

    标签: java eclipse documentation inheritdoc


    【解决方案1】:

    根据javadoc documentation

    cmets 的继承发生在所有 三种可能的继承情况 来自类和接口:

    • 当类中的方法覆盖超类中的方法时
    • 当接口中的方法覆盖超接口中的方法时
    • 当类中的方法实现接口中的方法时

    评论可以使用{@inheritDoc}标签显式继承。如果没有为覆盖方法提供 cmets,则 cmets 将被隐式继承。如果您愿意,可以覆盖继承 cmets 的各个方面(例如参数、返回值等)。

    重要的是,您需要确保包含要继承的注释的代码的源文件可用于 javadoc 工具。您可以使用 -sourcepath 选项来执行此操作。

    【讨论】:

      【解决方案2】:

      来自the 1.4.2 Javadoc manual

      继承方法注释的算法 - 如果方法没有 doc 注释或具有 {@inheritDoc} 标记,Javadoc 工具使用以下算法搜索适用的注释,即旨在找到最具体的适用文档注释,优先考虑接口而不是超类:

      1. 查看每个直接实现(或扩展)的接口,按照它们在方法声明中出现在“实现”(或“扩展”)一词之后的顺序。使用为此方法找到的第一个文档注释。
      2. 如果第 1 步未能找到文档注释,则以与在第 1 步中检查的相同顺序将整个算法递归地应用于每个直接实现(或扩展)的接口。
      3. 如果第 2 步未能找到文档注释并且这是 Object 以外的类(不是接口): 1.如果超类有这个方法的文档注释,使用它。 2. 如果步骤 3a 未能找到文档注释,则递归地将整个算法应用于超类。

      我相信(尽管我可能是错的)这个基本算法仍然适用于 Java 1.5 和 1.6...尽管 Sun 为工具集的每个版本发布一个完整的自包含的权威文档真的非常好...我想这是他们无法承受的开销,至少对于免费工具集而言。

      干杯。基思。


      编辑:

      这是一个快速而肮脏的例子。

      代码

      package forums;
      
      
      interface Methodical
      {
        /**
         * A no-op. Returns null.
         * @param i int has no effect.
         * @return int[] null.
         */
        public int[] function(int i);
      }
      
      
      interface Methodological extends Methodical
      {
        /**
         * Another no-op. Does nothing.
         */
        public void procedure();
      }
      
      
      class Parent implements Methodological
      {
        @Override
        public int[] function(int i) {
          return null;
        }
      
        @Override
        public void procedure() {
          // do nothing
        }
      
      }
      
      
      class Child extends Parent
      {
        /** {@inheritDoc} */
        @Override
        public int[] function(int i) {
            return new int[0];
        }
      
        /** {@inheritDoc} */
        @Override
        public void procedure() {
          System.out.println("I'm a No-op!");
        }
      
      }
      
      
      public class JavaDocTest
      {
        public static void main(String[] args) {
          try {
            new Child().procedure();
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      }
      

      Javadoc

      C:\Java\home\src\forums>javadoc -package -sourcepath . JavaDocTest.java
      Loading source file JavaDocTest.java...
      Constructing Javadoc information...
      Standard Doclet version 1.6.0_12
      Building tree for all the packages and classes...
      Generating forums/\Child.html...
      Generating forums/\JavaDocTest.html...
      Generating forums/\Methodical.html...
      Generating forums/\Methodological.html...
      Generating forums/\Parent.html...
      Generating forums/\package-frame.html...
      Generating forums/\package-summary.html...
      Generating forums/\package-tree.html...
      Generating constant-values.html...
      Building index for all the packages and classes...
      Generating overview-tree.html...
      Generating index-all.html...
      Generating deprecated-list.html...
      Building index for all classes...
      Generating allclasses-frame.html...
      Generating allclasses-noframe.html...
      Generating index.html...
      Generating help-doc.html...
      Generating stylesheet.css...
      

      生成 file:///C:/Java/home/src/forums/index.html

      function
      
      public int[] function(int i)
      
          A no-op. Returns null.
      
          Specified by:
              function in interface Methodical
          Overrides:
              function in class Parent
      
          Parameters:
              i - int has no effect. 
          Returns:
              int[] null.
      
      procedure
      
      public void procedure()
      
          Another no-op. Does nothing.
      
          Specified by:
              procedure in interface Methodological
          Overrides:
              procedure in class Parent
      

      【讨论】:

      • 我在帖子中引用的 javadoc 文档适用于 J2SE 1.6 版本。
      【解决方案3】:

      用 javaDoc 交换 @Override。

          @Override
          /**
           * {@inheritDoc}
           */
      

      【讨论】:

      • 这没有任何作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2014-09-28
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多