Javadoc-Link zur Methode in einer anderen Klasse


238

Derzeit verweise ich mit dieser Javadoc-Syntax auf Methoden in anderen Klassen:

@see {@link com.my.package.Class#method()}

Und soweit ich aus der Dokumentation verstehe, ist dies der richtige Weg, dies zu tun. Aber jetzt zum lustigen Teil oder frustrierend. Wenn ich dieses Javadoc generiere, erhalte ich zunächst folgenden Fehler:

warning - Tag @see:illegal character: "123" in "{@link com.my.package.Class#method()}"
warning - Tag @see:illegal character: "64" in "{@link com.my.package.Class#method()}"
warning - Tag @see: reference not found: {@link com.my.package.Class#method()}

Der generierte HTML-Code lautet:

"," <code>com.my.package.Class#method()}</code> ","

Und natürlich habe ich keinen Link. Kann mir jemand sagen, was passiert und wie man das behebt?

Gemäß der ASCII-Tabelle stehen die Zeichen 123 und 64 für wold für {und @. Warum sind diese Zeichen nicht gültig, wenn diese Syntax gemäß der Dokumentation korrekt ist?


1
Nur um zu überprüfen ... haben Sie die Dokumentation zum Javadoc-Generator gelesen? docs.oracle.com/javase/7/docs/technotes/tools/windows/…
Diogo Moreira

Haben Sie com.my.package.Classin der Klasse dieses JavaDoc importiert ? Die nicht gefundene Referenz scheint seltsam. Auf der anderen Seite habe ich sie nie zusammen verwendet, aber es besteht die Möglichkeit, dass @seeund @linkKonflikte miteinander, wenn @seeich davon ausgehe , dass dies eine eigene Sekunde erzeugt, würde mich das nicht überraschen.
Fritz

1
@ DiogoMoreira - Nein, ich habe noch nichts über den Motor gelesen, aber ich werde es überprüfen.
Robert

@ Gamb - Natürlich ist es nicht meine eigentliche Javadoc-Eingabe ;-) Ja, alle Importe sind vorhanden.
Robert

1
Ein ähnlicher Fehler tritt auf, wenn Sie einen unformatierten Hyperlink als Wert für das @seeTag in Ihr Javadoc einfügen. Um dies in diesem Fall zu beheben, wickeln Sie den Hyperlink in ein HTML-Ankerelement:/** @see <a href="http://example.com">Example</a> */
Cyber-Monk

Antworten:


280

Für das Javadoc-Tag @seemüssen Sie nicht verwenden @link. Javadoc erstellt einen Link für Sie. Versuchen

@see com.my.package.Class#method()

Hier finden Sie weitere Informationen zu @see.


Vielen Dank dafür, ich habe gerade diese Lösung getestet und das funktioniert gut! Aber ich habe an so vielen Stellen gelesen, dass Sie den Link in see verwenden sollten, um dies zum Laufen zu bringen, also ist das ein bisschen seltsam ...
Robert

7
Sie können @linkan anderen Stellen verwenden, dass Javadoc nicht bereits zu einem Link wird, z. B. in der Beschreibung für @param, in der Beschreibung für @return, im Hauptteil der Beschreibung usw.
rgettman

1
Als ich dies gerade versuchte, wird die Methode als einfacher Text angezeigt. Sie kann nicht wie mein @see für eine lokale Methode angeklickt werden.
JesseBoyd

146

Abgesehen davon @seeist eine allgemeinere Art, auf eine andere Klasse und möglicherweise eine Methode dieser Klasse zu verweisen, die {@link somepackage.SomeClass#someMethod(paramTypes)}. Dies hat den Vorteil, dass es mitten in einer Javadoc-Beschreibung verwendet werden kann.

Aus der Javadoc-Dokumentation (Beschreibung des @ link-Tags) :

Dieses Tag ist @see sehr ähnlich - beide erfordern dieselben Referenzen und akzeptieren genau dieselbe Syntax für package.class # member und label. Der Hauptunterschied besteht darin, dass {@link} einen Inline-Link generiert, anstatt den Link im Abschnitt "Siehe auch" zu platzieren. Außerdem beginnt und endet das Tag {@link} mit geschweiften Klammern, um es vom Rest des Inline-Textes zu trennen.


68

Die Lösung für das ursprüngliche Problem besteht also darin, dass Sie nicht sowohl die Referenzen "@see" als auch "{@link ...}" in derselben Zeile benötigen. Das "@link" -Tag ist autark und kann, wie bereits erwähnt, an einer beliebigen Stelle im Javadoc-Block abgelegt werden. Sie können also die beiden Ansätze mischen:

/**
 * some javadoc stuff
 * {@link com.my.package.Class#method()}
 * more stuff
 * @see com.my.package.AnotherClass
 */

4
Diese Antwort sollte akzeptiert werden, da die anderen beiden Antworten nicht zeigen, dass '@link' oder '@see' in mehrzeiligen Kommentaren / ** * / nicht in einer einzelnen Zeile stehen müssen
Stoycho Andreev

1
@Sniper, {@link }funktioniert gut in einem einzeiligen Javadoc-Kommentar. Beziehen Sie sich vielleicht auf die Tatsache, dass sie nicht mit Kommentaren funktionieren, die mit beginnen //? /** */ist Javadoc und ist für alle Javadoc-Funktionen erforderlich.
Jase

Ja @Jase Ich habe genau das getroffen, der Kommentar muss / ** * / sein, aber nicht //
Stoycho Andreev

6
@Sniper Ich denke nicht, dass dies die akzeptierte Antwort erfordert, da dies zunächst eine Javadoc-Frage ist - es sollte allgemein verstanden werden, dass Javadoc nur in Javadoc-Kommentaren funktioniert.
Jase

@Jase stimmt Ihnen irgendwie zu, aber ich glaube, dass Informationsquellen wie Stackoverflow Erklärungen anhand von Beispielen benötigen, die nicht aus der Oracle-Dokumentation oder einer anderen Dokumentation stammen, was offensichtlich nicht klar ist. Diese Antwort ist die einzige Antwort, die ein Beispiel hat. Die beiden obigen Antworten sind Anführungszeichen.
Stoycho Andreev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.