Javadoc ลิงก์ไปยังเมธอดในคลาสอื่น


238

ขณะนี้ฉันกำลังอ้างอิงวิธีในคลาสอื่นด้วยไวยากรณ์ Javadoc นี้:

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

และในสิ่งที่ฉันเข้าใจจากเอกสารนี้เป็นวิธีที่ถูกต้องในการทำสิ่งนี้ แต่ตอนนี้เป็นส่วนที่ตลกหรือน่าหงุดหงิด เมื่อฉันสร้าง javadoc นี้ฉันก่อนอื่นได้รับข้อผิดพลาดดังต่อไปนี้:

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()}

รหัส HTML ที่สร้างขึ้นนี้คือ:

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

และแน่นอนฉันไม่มีลิงค์ ใครสามารถบอกฉันว่าเกิดอะไรขึ้นและคำแนะนำเกี่ยวกับวิธีแก้ไขปัญหานี้ได้อย่างไร

ตามตารางอักขระ ASCII 123 และ 64 สำหรับ wold แทน {และ @ ดังนั้นทำไมอักขระเหล่านี้จึงไม่ถูกต้องเมื่อไวยากรณ์นี้ถูกต้องตามเอกสารประกอบ


1
เพียงตรวจสอบ ... คุณอ่านเอกสาร Javadoc Generator แล้วหรือยัง docs.oracle.com/javase/7/docs/technotes/tools/windows/…
Diogo Moreira

คุณนำเข้าcom.my.package.ClassJavaDoc นี้ในชั้นเรียนหรือไม่? อ้างอิงไม่พบดูเหมือนแปลก ในทางกลับกันฉันไม่เคยใช้มันมารวมกัน แต่มีโอกาส@seeและ@linkความขัดแย้งซึ่งกันและกันการ@seeสร้างความเป็นตัวของตัวเองมันจะไม่ทำให้ฉันประหลาดใจ
ฟริตซ์

1
@DiogoMoreira - ไม่ฉันไม่ได้อ่านเกี่ยวกับเครื่องยนต์ แต่ฉันจะลองดู
Robert

@Gamb - แน่นอนว่าไม่ใช่ Javadoc input ที่แท้จริงของฉัน ;-) ใช่การนำเข้าทั้งหมดอยู่ในสถานที่
Robert

1
ข้อผิดพลาดที่คล้ายกันเกิดขึ้นหากคุณใส่ไฮเปอร์ลิงก์แบบดิบเป็นค่าสำหรับ@seeแท็กใน javadoc ของคุณ หากต้องการแก้ไขในกรณีนี้ให้เชื่อมโยงหลายมิติในองค์ประกอบตัวยึด html:/** @see <a href="http://example.com">Example</a> */
cyber-monk

คำตอบ:


280

สำหรับแท็ก Javadoc @seeคุณไม่จำเป็นต้องใช้@link; Javadoc จะสร้างลิงค์ให้คุณ ลอง

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

@seeต่อไปนี้เป็นข้อมูลเพิ่มเติมเกี่ยวกับ


ขอบคุณสำหรับสิ่งนี้ฉันเพิ่งทดสอบโซลูชันนี้และใช้งานได้ดี! แต่ฉันได้อ่านในหลาย ๆ ที่ที่คุณควรใช้ลิงค์เพื่อดูว่ามันจะทำงานได้อย่างไรมันแปลกไปหน่อย ...
Robert

7
คุณสามารถใช้@linkในที่อื่นที่ Javadoc ไม่ได้เปลี่ยนเป็นลิงก์เช่นในคำอธิบาย@paramในคำอธิบาย@returnในส่วนหลักของคำอธิบาย ฯลฯ
rgettman

1
เมื่อฉันลองทำมันจะแสดงวิธีเป็นข้อความธรรมดามันไม่สามารถคลิกได้เหมือน @see ของฉันสำหรับวิธีการในท้องถิ่น
JesseBoyd

146

นอกเหนือจาก@seeนั้นวิธีการทั่วไปในการอ้างถึงคลาสอื่นและวิธีการที่เป็นไปได้ของคลาสนั้นคือ{@link somepackage.SomeClass#someMethod(paramTypes)}เป็นวิธีทั่วไปมากขึ้นของหมายถึงวิธีการเรียนและอาจจะเป็นอีกคนหนึ่งของชั้นเรียนที่เป็นสิ่งนี้มีประโยชน์ในการใช้งานกลางคำอธิบาย javadoc

จากเอกสาร javadoc (คำอธิบายของแท็ก @link) :

แท็กนี้คล้ายกับ @see มากทั้งสองต้องการการอ้างอิงที่เหมือนกันและยอมรับไวยากรณ์เดียวกันสำหรับ package.class # member และ label ข้อแตกต่างที่สำคัญคือ {@link} สร้างลิงค์ในบรรทัดแทนที่จะวางลิงก์ในส่วน "ดูเพิ่มเติม" นอกจากนี้แท็ก {@link} จะเริ่มต้นและสิ้นสุดด้วยเครื่องหมายปีกกาเพื่อแยกออกจากส่วนที่เหลือของข้อความในบรรทัด


68

ดังนั้นวิธีแก้ไขปัญหาดั้งเดิมคือคุณไม่จำเป็นต้องใช้ทั้งการอ้างอิง "@see" และ "{@link ... }" ในบรรทัดเดียวกัน แท็ก "@link" เป็นแบบพอเพียงและตามที่ระบุไว้คุณสามารถวางไว้ที่ใดก็ได้ในบล็อก javadoc ดังนั้นคุณสามารถผสมสองวิธี:

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

4
นี้ควรจะเป็นคำตอบที่ได้รับการยอมรับเพราะอีกสองคำตอบไม่ได้แสดงให้เห็นว่า '@link' หรือ '@see' จำเป็นต้องในความคิดเห็นของหลายแถว / ** * / ไม่แถวเดียว
Stoycho Andreev

1
@Sniper {@link }ทำงานได้ดีในความคิดเห็น Javadoc แบบแถวเดียวคุณอาจอ้างถึงข้อเท็จจริงที่ว่าพวกเขาไม่ได้ทำงานกับความคิดเห็นที่เริ่มต้นด้วย//หรือไม่ /** */เป็น Javadoc และจำเป็นสำหรับฟังก์ชัน Javadoc ใด ๆ
Jase

ใช่ @Jase ฉันได้พบสิ่งนี้ความคิดเห็นจะต้องเป็น / ** * / แต่ไม่ใช่ //
Stoycho Andreev

6
@ Sniper ฉันไม่คิดว่าสิ่งนี้จะเป็นคำตอบที่ยอมรับได้เพราะนี่เป็นคำถาม Javadoc ที่จะเริ่มต้นด้วย - โดยทั่วไปควรเข้าใจว่า Javadoc ใช้งานได้กับข้อคิดเห็น Javadoc เท่านั้น
Jase

@Jase เห็นด้วยกับคุณ แต่ฉันเชื่อว่าแหล่งข้อมูลเช่น Stackoverflow ต้องการคำอธิบายโดยตัวอย่างไม่ใช่ราคาจากเอกสารของ Oracle หรือเอกสารอื่น ๆ ซึ่งไม่ชัดเจน คำตอบนี้เป็นคำตอบเดียวที่มีตัวอย่างเหนือสองคำตอบคือคำพูด
Stoycho Andreev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.