Làm thế nào để tham khảo một phương thức trong javadoc?


864

Làm cách nào tôi có thể sử dụng @linkthẻ để liên kết đến một phương thức?

Tôi muốn thay đổi:

/**
 * 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()

đến:

/**
 * 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()

nhưng tôi không biết làm thế nào để định dạng @linkthẻ chính xác.


22
Tôi biết điều này là một vài năm trước đây nhưng ... nhìn vào các lớp Java chính thức có thể giúp tìm thấy bất kỳ hình thức định dạng Javadoc nào bạn cần. Ví dụ, nhìn vào HashMap Javadoc.
Barshe Roussy

Câu trả lời:


1122

Bạn sẽ tìm thấy nhiều thông tin về JavaDoc tại Đặc tả Nhận xét Tài liệu cho Tài liệu chuẩn , bao gồm thông tin về

{@link gói. class # nhãn thành viên}

thẻ (mà bạn đang tìm kiếm). Ví dụ tương ứng từ tài liệu này như sau

Ví dụ, đây là một nhận xét đề cập đến phương thức getComponentAt (int, int):

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

Phần package.classcó thể được dùng nếu phương thức được tham chiếu trong lớp hiện tại.


Các liên kết hữu ích khác về JavaDoc là:


743

Định dạng chung, từ phần @link của tài liệu javadoc , là:

{@link gói. class # nhãn thành viên}

Ví dụ

Phương thức trong cùng một lớp:

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

Phương thức trong một lớp khác, trong cùng một gói hoặc được nhập:

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

Phương thức trong một gói khác nhau và không được nhập:

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

Nhãn được liên kết với phương thức, trong văn bản thuần hơn là phông chữ mã:

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

Một chuỗi các cuộc gọi phương thức, như trong câu hỏi của bạn. Chúng tôi phải chỉ định nhãn cho các liên kết đến các phương thức bên ngoài lớp này, hoặc chúng tôi nhận được getFoo().Foo.getBar().Bar.getBaz(). Nhưng những nhãn này có thể dễ vỡ; xem "Nhãn" bên dưới.

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

Nhãn

Tái cấu trúc tự động có thể không ảnh hưởng đến nhãn. Điều này bao gồm đổi tên phương thức, lớp hoặc gói; và thay đổi chữ ký phương thức.

Vì vậy, cung cấp một nhãn chỉ nếu bạn muốn văn bản khác nhau hơn so với mặc định.

Ví dụ: bạn có thể liên kết từ ngôn ngữ của con người sang mã:

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

Hoặc bạn có thể liên kết từ một mẫu mã với văn bản khác với mặc định, như được hiển thị ở trên trong "Chuỗi các cuộc gọi phương thức". Tuy nhiên, điều này có thể dễ vỡ trong khi các API đang phát triển.

Nhập xóa và #member

Nếu chữ ký phương thức bao gồm các loại được tham số hóa, hãy sử dụng xóa các loại đó trong javadoc @link. Ví dụ:

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

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

Đợi đã: Tôi chỉ muốn tên phương thức có liên kết, tôi cũng không muốn tên lớp.
Jason S

À được rồi. Ví dụ đầu tiên trong liên kết ở trên minh họa điều đó.
Andy Thomas

1
+1 để cung cấp liên kết Java 6 mà tôi không được liên kết từ trang HowTo của Java JavaDoc. Tôi vẫn không thể hòa hợp với các liên kết tiên tri ... (các liên kết cố định với Java 6 trong câu trả lời của tôi).
FrVaBe

@K. Claszen: download.oracle.com/javase/6/docs , sau đó nhấp vào javadoc trong sơ đồ, sau đó chọn Trang tham khảo công cụ Javadoc (Microsoft Windows) , sau đó chọn thẻ Javadoc .
Paŭlo Ebermann

@ Paŭlo Ebermann Cảm ơn! Sẽ cố gắng sử dụng trang 'docs' làm điểm vào trong tương lai.
FrVaBe

16

bạn có thể sử dụng @seeđể làm điều đó:

mẫu vật:

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: "Làm cách nào tôi có thể sử dụng thẻ @link để liên kết đến một phương thức?" Các @link thẻ có thể sử dụng inline trong một đoạn văn, theo yêu cầu của OP. Các @see thẻ không thể. Xem thêm chi tiết tại câu hỏi này .
Andy Thomas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.