2012-02-28 10 views
25

は私がjavadocを使用して、それを文書化しているクラスの静的メソッドを、考えてみましょう:のJavadocバグ:@linkはジェネリック医薬品を扱うことができない「<>」

/** 
* Description here. 
* 
* @param names  - The parameters of the impression request. 
* @param ids   - An intent object to enrich. 
* @param prefix - A prefix. 
*/ 

public static void parse(Map<String, String> names, String ids, String prefix) 
    ... 

、オーバーロードで説明の重複を避けるために、

/** 
* Overloaded version with default prefix. 
* {@link #<parse(Map<String, String>, String, String)> [Text]} 
*/ 

public static void parse(Map<String, String> names, String ids, String prefix) 

次の警告提供します:

@link:illegal character: "60" in "#parseBtCategories(Map<String, String>, 
                String, String) Text" 
の方法のバージョンでは、私は、javadocの @linkを使用したいです

ASCII 60は<です。これはメソッドシグネチャの一部です。 Map, String, String)ナットで動作します。この表記は、2つの異なるタイプのマップを区別できません。

This seems to be a known bug.回避策はありますか?

+0

だけに一緒に暮らすことを学んだ。たとえば、確かに:あなたは実際には、 '' parse'の前に '<'で '{@ link#

答えて

21

パラメータ化された型は、メソッドの署名の一部ではありません。

GenericsType Erasureとを実装しています。 concept of Type Erasureは、generic typesがコンパイル時にのみ利用可能であり、その時点でそれらは「消去」されているということです。クラスのバイトコードから削除されたことを意味します。したがって、実行時にアクセスできないですはメソッドの署名の一部ではありません。

だから、あなたは同じ生タイプに解決ジェネリック型を持つ2つのメソッドをオーバーロードすることはできませんので、それらは、Javadocのリンクの署名の一部であることには本当の理由はありません。で、一般的なタイプのあいまいさがあることはできませんあなたのソースの署名。

さらに、JavadocはHTMLタグをサポートしており、私は、これはそれがここにホコリを噛むもう一つの理由かもしれないと仮定し、私は実際のJavadoc処理ツールは、このひどく実施された疑い。 デビッド・コンラッドソリューションと同様に

+29

私はその議論が水を保有しているとは思わない。コンパイラがタイプ消去を伴うジェネリックを実装しているだけで、ドキュメントにジェネリック型パラメータを含めることが妨げられるわけではありません。ジェネリックとドキュメントは人のためのものですが、バイトコードはJVMのためのものです。型の削除はJVMの側でより強く行われるため、ここでは密接な関係にありません。 –

+0

@AdamMihalcin:私は文書作成のために重要であることに同意します。また、ドキュメントには、シグネチャを記述するジェネリック型を含めることができます。しかし、なぜ私はリンクのためにそれらを使用する必要があるのか​​分かりません。これは同じことではありません。 – haylem

+0

@AdamMihalcin:答えを受け入れてくれてありがとう。私はあなたに[this](http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/tip/src/share/classes/java/util/Collections.java)へのリンクを与えるのを忘れていました。あなた自身で見ることができます。ご覧のように、JDKライブラリでさえ、 '@link'タグでパラメータ化された型情報を使用しません。 – haylem

11

は、次の構文を使用して、リンクの説明として、完全な署名を使用することができます。

{@link class#method(signature) text-to-display} 

<>をエスケープすることを忘れないでください。

{@link #parse(Map, String, String) parse(Map&lt;String, String&gt;, String, String)} 
+0

これはどのように戻り値の型を文書化する必要がありますか? – Lawrence

+0

これは最高の答えだと思います。 – xdhmoore

0

は、それはあなたが探しているものではないかもしれないが、私は{RfRequestSummaryDto @link}の * @return {@linkリスト}のようなもの

関連する問題