为什么Javadoc不会让我的子类继承Java类的文档?

时间:2011-05-23 19:46:33

标签: java javadoc subclass inheritdoc

我一直在寻找几个月的答案,我尝试过多种方法,包括解压缩Compressed文件夹src.zip并将其用作Javadoc的参数(例如:javadoc -sourcepath src com.example.test

这是JDK 6 Update 24附带的默认Javadoc。

假设我正在开发一个实现java.util.Map接口的新地图。默认情况下,我从Map接口覆盖的方法应该从接口继承文档,如果我没有弄错的话。但是,javadoc永远不会这样做。

到目前为止,唯一解决这个问题的方法实际上是用Java编写的类(例如:javadoc com.example.text java.util)。我不想这样做,因为它似乎重写了Java类,但这是唯一的方法吗?如果它是我想我可以忍受它,但我的理解是有另一种方法来做到这一点。

谢谢=)如果这有点乱,我很抱歉。这是我第一次使用Stack Overflow。如果已经提出这个问题,我也很抱歉。我已经阅读了很多类似的问题,因为它们没有涵盖我想要提出的所有内容,而且我发现它们非常令人困惑,因为它们涉及编写自己的Javadoc实现。无论如何,谢谢你在advanced =)

编辑:5月25日4:44

好吧=)如果我理解正确,你想看一个例子。这是一个更简单的例子,我试图看看是不是因为我正在尝试一些不起作用的东西。

package com.example;

/**
 * A simple class that returns an upper-case string representation.
 */
public class UpperCaseObject {

    @Override public int hashCode() {
        return super.hashcode();
    }

    /**
     * {@inheritDoc}
     *
     * <P>The {@code toString} method for class {@code UpperCaseObject} returns
     * converted to uppercase.</P>
     *
     * @see String#toUpperCase()
     */
    @Override public String toString() {
        return super.toString().toUpperCase();
    }

}

我将此示例(文件名为UpperCaseObject.java)移动到目录javadoc-test/com/example中,我还创建了另一个目录javadoc-test/java/lang,将Object.java(来自src.zip)放入它

我对javadoc的调用是来自javadoc -link http://download.oracle.com/javase/6/docs/api/ com.example目录的javadoc-test。我的路径参数中有jdk6 bin目录。

我期望的两件事是UpperCaseObject.hashCode继承所有文档,UpperCaseObject.toString来自java.lang.Object的额外段落之前的所有内容。然而,遗憾的是,我没有得到任何文档。

编辑:

嗯,我必须做的是以下内容。这只是一个简单的解决方法。

  1. 我像往常一样复制了source.zip中的所有源文件。
  2. 我还为每个包制作了包文件。它们包含第一段(带摘要的段落)和第二段,“请参阅Java™平台标准版6 API规范中的Package Summary以获取更多信息。”
  3. 源文件本质上是超类,它们的超类(和接口),以及它们抛出的任何异常也在同一个包中。唯一的例外是java.lang,我只需要获取Object。除了java.lang之外,还需要例外,如果异常与抛出类在同一个包中,则其他包没有链接。
  4. 我javadoc了我正在使用的所有包/子类化/异常抛出。
  5. 我将确保在概述文件中包含有关标准软件包和我自己的软件包的一些信息。
  6. 不幸的是,我现在只能解决这个问题,但我确信这可能是我的Java版本的问题。这听起来像其他人有类似的问题,并提出了自己的解决方法。这只是我自己的=)

    我仍然会得到答案,但同时这是最方便的选择。非常感谢你!

2 个答案:

答案 0 :(得分:3)

继承方法的源文件在运行时需要位于javadoc工具的-sourcepath上。您不需要在命令行上传递继承的类。

答案 1 :(得分:1)

您可以做的一件事是使用-link选项链接到这些类的官方Javadoc:

javadoc -sourcepath src -link http://download.oracle.com/javase/6/docs/api com.example.test

这将允许Javadoc将SDK的类视为“外部引用类”。来自Javadoc文档:

在javadoc运行期间未生成其文档的引用类。换句话说,这些类不会在命令行上传递给Javadoc工具。生成的文档中与这些类的链接被称为外部引用或外部链接。例如,如果仅在java.awt包上运行Javadoc工具,则java.lang中的任何类(如Object)都是外部引用的类。可以使用-link和-linkoffline选项链接外部引用的类。外部引用类的一个重要属性是它的源注释通常不可用于Javadoc运行。在这种情况下,这些注释不能被继承。

请注意,仍然不会继承这些类的Javadoc。但是,您现在可以链接到它,如下所示:

public class MyMap implements java.util.Map {
    ...
    /**
     * @see java.util.Map#isEmpty()
     */
    @Override
    public boolean isEmpty() {
        ...
    }
}

[编辑]

@see标记用于说明。 Javadoc应该自动生成一个“Specified By”链接,所以你可以完全省略Javadoc注释。