วิธีการอ้างอิงวิธีการใน javadoc?


864

ฉันจะใช้@linkแท็กเพื่อเชื่อมโยงไปยังวิธีการได้อย่างไร

ฉันต้องการเปลี่ยน:

/**
 * Returns the Baz object owned by the Bar object owned by Foo owned by this.
 * A convenience method, equivalent to getFoo().getBar().getBaz()
 * @return baz
 */
public Baz fooBarBaz()

ถึง:

/**
 * Returns the Baz object owned by the Bar object owned by Foo owned by this.
 * A convenience method, equivalent to {@link getFoo()}.{@link getBar()}.{@link getBaz()}
 * @return baz
 */
public Baz fooBarBaz()

แต่ฉันไม่รู้วิธีจัดรูปแบบ@linkแท็กอย่างถูกต้อง


22
ฉันรู้ว่านี่เป็นไม่กี่ปีที่ผ่านมา แต่ ... การดูคลาส Java อย่างเป็นทางการสามารถช่วยค้นหารูปแบบ Javadoc ใด ๆ ที่คุณต้องการ ตัวอย่างเช่นดูที่ HashMap Javadoc
Christophe Roussy

คำตอบ:


1122

คุณจะพบข้อมูลมากมายเกี่ยวกับ JavaDoc ได้ที่Documentation Comment Specification สำหรับ Standard Docletรวมถึงข้อมูลเกี่ยวกับ

{@link package.class # ป้ายกำกับสมาชิก}

แท็ก (ที่คุณกำลังมองหา) ตัวอย่างที่เกี่ยวข้องจากเอกสารประกอบมีดังนี้

ตัวอย่างเช่นต่อไปนี้เป็นความคิดเห็นที่อ้างถึงเมธอด getComponentAt (int, int):

Use the {@link #getComponentAt(int, int) getComponentAt} method.

package.classส่วนหนึ่งสามารถ ommited หากวิธีเรียกว่าอยู่ในระดับปัจจุบัน


ลิงค์ที่มีประโยชน์อื่น ๆ เกี่ยวกับ JavaDoc คือ:


743

รูปแบบทั่วไปจากส่วน @link ของเอกสาร javadocคือ:

{@link package.class # ป้ายกำกับสมาชิก}

ตัวอย่าง

วิธีการในชั้นเรียนเดียวกัน:

/** See also {@link #myMethod(String)}. */
void foo() { ... }

วิธีการในชั้นเรียนที่แตกต่างกันทั้งในแพคเกจเดียวกันหรือนำเข้า:

/** See also {@link MyOtherClass#myMethod(String)}. */
void foo() { ... }

วิธีการในแพ็คเกจอื่นและไม่นำเข้า:

/** See also {@link com.mypackage.YetAnotherClass#myMethod(String)}. */
void foo() { ... }

ป้ายกำกับที่เชื่อมโยงกับวิธีการในข้อความธรรมดามากกว่าแบบอักษรรหัส:

/** See also this {@linkplain #myMethod(String) implementation}. */
void foo() { ... }

ห่วงโซ่ของวิธีการโทรตามที่คุณต้องการ getFoo().Foo.getBar().Bar.getBaz()เราต้องระบุป้ายชื่อสำหรับการเชื่อมโยงกับวิธีการนอกชั้นนี้หรือที่เราได้รับ แต่ฉลากเหล่านี้อาจบอบบางได้ ดู "ป้ายกำกับ" ด้านล่าง

/**
 * A convenience method, equivalent to 
 * {@link #getFoo()}.{@link Foo#getBar() getBar()}.{@link Bar#getBaz() getBaz()}.
 * @return baz
 */
public Baz fooBarBaz()

ป้ายกำกับ

การปรับโครงสร้างอัตโนมัติใหม่อาจไม่ส่งผลกระทบต่อฉลาก ซึ่งรวมถึงการเปลี่ยนชื่อวิธีการเรียนหรือแพ็คเกจ; และเปลี่ยนลายเซ็นวิธีการ

ดังนั้นให้ระบุเฉพาะเมื่อคุณต้องการข้อความที่แตกต่างจากค่าเริ่มต้น

ตัวอย่างเช่นคุณอาจลิงค์จากภาษามนุษย์ไปยังรหัส:

/** You can also {@linkplain #getFoo() get the current foo}. */
void setFoo( Foo foo ) { ... }

หรือคุณอาจเชื่อมโยงจากตัวอย่างโค้ดที่มีข้อความแตกต่างจากค่าเริ่มต้นดังที่แสดงไว้ด้านล่างภายใต้ "การเรียกใช้เมธอดโซ่" อย่างไรก็ตามอาจมีความเปราะบางในขณะที่ API กำลังพัฒนา

พิมพ์การลบและ #member

หากลายเซ็นต์ของเมธอดรวมถึงชนิดที่กำหนดพารามิเตอร์ใช้การลบประเภทเหล่านั้นใน javadoc @link ตัวอย่างเช่น:

int bar( Collection<Integer> receiver ) { ... }

/** See also {@link #bar(Collection)}. */
void foo() { ... }

เดี๋ยวก่อน: ฉันแค่ต้องการชื่อเมธอดที่มีลิงก์ฉันไม่ต้องการชื่อคลาสเช่นกัน
Jason S

อ่าโอเค. ตัวอย่างแรกในลิงค์ด้านบนแสดงให้เห็นว่า
Andy Thomas

1
+1 สำหรับการให้ลิงค์ Java 6 ที่ฉันไม่ได้เชื่อมโยงจากหน้า Oracle JavaDoc HowTo ฉันยังไม่เข้ากับ oracle ลิงค์ ... (ลิงก์ถาวรไปยัง Java 6 ในคำตอบของฉัน)
FrVaBe

@K Claszen: download.oracle.com/javase/6/docsจากนั้นคลิกJavadocในแผนภาพแล้วเลือกJavadoc เครื่องมืออ้างอิงหน้า (Microsoft Windows)แล้วแท็ก Javadoc
Paŭlo Ebermann

@ Paŭlo Ebermann ขอบคุณ! จะพยายามใช้หน้า 'เอกสาร' เป็นจุดเริ่มต้นในอนาคต
FrVaBe

16

คุณสามารถใช้@seeเพื่อทำสิ่งนั้น:

ตัวอย่าง:

interface View {
        /**
         * @return true: have read contact and call log permissions, else otherwise
         * @see #requestReadContactAndCallLogPermissions()
         */
        boolean haveReadContactAndCallLogPermissions();

        /**
         * if not have permissions, request to user for allow
         * @see #haveReadContactAndCallLogPermissions()
         */
        void requestReadContactAndCallLogPermissions();
    }

4
OP: "ฉันจะใช้แท็ก @link เพื่อเชื่อมโยงไปยังวิธีการได้อย่างไร" @linkแท็กสามารถนำมาใช้แบบอินไลน์ภายในวรรคตามที่ร้องขอโดยสหกรณ์ @seeแท็กไม่สามารถ ดูรายละเอียดเพิ่มเติมที่คำถามนี้
Andy Thomas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.