7

私は数か月間答えを探していましたが、圧縮フォルダー src.zip を解凍し、それを Javadoc のパラメーターとして使用するなど、複数のことを試しました (例: javadoc -sourcepath src com.example.test)

これは、JDK 6 Update 24 に付属するデフォルトの Javadoc です。

java.util.Mapインターフェイスを実装する新しいマップに取り組んでいるとしましょう。デフォルトでは、Map インターフェースからオーバーライドするメソッドは、インターフェースからドキュメントを継承する必要があります (私の間違いでなければ)。ただし、javadoc は決してそれを行いません。

これまでのところ、この問題を解決した唯一の方法は、Java によって記述されたクラスを実際に javadoc 化することです (例: javadoc com.example.text java.util)。Javaクラスを書き直したように見えるので、これをしたくありませんが、これが唯一の方法ですか? もしそうなら、私はそれで暮らすことができると思いますが、これを行う別の方法があることは私の理解でした.

ありがとう =) これが少し乱雑でしたら申し訳ありません。スタック オーバーフローを使用するのはこれが初めてです。また、この質問が既にされている場合は申し訳ありません。私が聞きたいことすべてをカバーしていないという類似の質問をたくさん読みましたが、Javadoc の独自の実装を作成する必要があるため、非常に紛らわしいことがわかりました。とにかく、高度にありがとう=)

編集: 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別のディレクトリを作成して (src.zip から) その中にjavadoc-test/java/lang配置しました。Object.java

私が行った javadoc への呼び出しは、ディレクトリからのものでした。path パラメータに jdk6 bin ディレクトリがあります。javadoc -link http://download.oracle.com/javase/6/docs/api/ com.examplejavadoc-test

私が期待していた 2 つのことはUpperCaseObject.hashCode、すべてのドキュメントとUpperCaseObject.toString、追加の段落の前のすべてをjava.lang.Object. しかし、残念ながら、私はドキュメントを入手できませんでした。

編集:

さて、私がしなければならなかったのは次のことでした。これは単純な回避策です。

  1. 通常どおり、source.zip からすべてのソース ファイルをコピーしました。
  2. 各パッケージのパッケージファイルも作成しました。それらには、最初の段落 (概要を含む段落) と、「詳細については、Java™ プラットフォーム、Standard Edition 6 API 仕様のパッケージの概要を参照してください」という 2 番目の段落が含まれています。
  3. ソース ファイルは基本的に、スーパー クラス、それらのスーパー クラス (およびインターフェイス)、およびそれらがスローしたすべての例外であり、それらも同じパッケージに含まれていました。唯一の例外は、Object を取得するだけでよい java.lang でした。例外がスローされたクラスと同じパッケージにある場合、java.lang を除いて、他のパッケージはリンクされないため、例外も必要でした。
  4. 使用/サブクラス化/例外スロー元のすべてのパッケージを javadoc しました。
  5. 標準パッケージと私自身のパッケージに関する情報を概要ファイルに含めるようにします。

残念ながら、今のところ回避策しかありませんが、私のバージョンの Java に問題がある可能性があると確信しています。他の人も同様の問題を抱えていて、独自の回避策を考え出したようです。これは私のものです=)

私はまだ回答を求めていますが、当面はこれが最も便利なオプションです。どうもありがとうございました!

4

2 に答える 2

3

継承されたメソッドのソース ファイルは、実行時に javadoc ツールの -sourcepath にある必要があります。コマンドラインで継承されたクラスを渡す必要はありません。

于 2011-05-23T19:55:56.797 に答える
1

-linkできることの 1 つは、次のオプションを使用して、これらのクラスの公式 Javadoc にリンクすることです。

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

これにより、Javadoc は SDK のクラスを「外部参照クラス」として扱うことができます。Javadoc ドキュメントから:

javadoc の実行中にドキュメントが生成されない参照クラス。つまり、これらのクラスは、コマンド行で Javadoc ツールに渡されません。これらのクラスへの生成されたドキュメント内のリンクは、外部参照または外部リンクと呼ばれます。たとえば、Javadoc ツールを java.awt パッケージのみで実行すると、Object などの java.lang のすべてのクラスが外部参照クラスになります。外部参照クラスは、-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 コメントを完全に省略できます。

于 2011-05-23T21:00:54.943 に答える