Javadoc liên kết đến phương thức trong lớp khác


238

Hiện tại tôi đang tham khảo các phương thức trong các lớp khác với cú pháp Javadoc này:

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

Và trong những gì tôi hiểu từ tài liệu này là cách chính xác để làm điều này. Nhưng bây giờ đến phần buồn cười, hoặc bực bội. Khi tôi tạo javadoc này, trước hết tôi gặp lỗi sau:

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

Mã HTML được tạo ra này là:

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

Và tất nhiên tôi không có liên kết. Bất cứ ai có thể cho tôi biết những gì đang xảy ra, và bất kỳ gợi ý về cách khắc phục điều này?

Theo các ký tự bảng ASCII 123 và 64 cho wold đại diện cho {và @, vậy tại sao các ký tự này không hợp lệ khi cú pháp này đúng theo tài liệu?


1
Chỉ để kiểm tra ... bạn đã đọc tài liệu Javadoc Generator chưa? docs.oracle.com/javase/7/docs/technotes/tools/windows/iêu
Diogo Moreira

Bạn đã nhập com.my.package.Classtrong lớp JavaDoc này được viết chưa? Các tài liệu tham khảo không tìm thấy có vẻ kỳ lạ. Mặt khác, tôi chưa bao giờ sử dụng chúng kết hợp nhưng có một cơ hội @see@linkxung đột với nhau, lấy điều đó @seetạo ra bí mật riêng của nó, điều đó sẽ không làm tôi ngạc nhiên.
Fritz

1
@DiogoMoreira - Không tôi không đọc về động cơ, nhưng tôi sẽ kiểm tra nó.
Robert

@Gamb - Tất nhiên đó không phải là đầu vào Javadoc thực tế của tôi ;-) Có tất cả các mục nhập.
Robert

1
Một lỗi tương tự xảy ra nếu bạn đặt một siêu liên kết thô làm giá trị cho @seethẻ trong javadoc của bạn. Để khắc phục nó trong trường hợp này, hãy bọc siêu liên kết trong một phần tử neo html:/** @see <a href="http://example.com">Example</a> */
cyber-monk

Câu trả lời:


280

Đối với thẻ Javadoc @see, bạn không cần sử dụng @link; Javadoc sẽ tạo một liên kết cho bạn. Thử

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

Dưới đây là thông tin thêm về @see.


Cảm ơn vì điều này, tôi mới thử nghiệm giải pháp này và nó hoạt động tốt! Nhưng tôi đã đọc ở rất nhiều nơi mà bạn nên sử dụng liên kết để xem để hoạt động này, vì vậy điều đó hơi lạ ...
Robert

7
Bạn có thể sử dụng @linkở những nơi khác mà Javadoc chưa biến thành một liên kết, ví dụ như trong phần mô tả cho @param, trong phần mô tả cho @return, trong phần chính của phần mô tả, v.v.
rgettman

1
Khi tôi thử nó, nó sẽ hiển thị phương thức dưới dạng văn bản thuần túy, nó không thể nhấp được như @see của tôi cho một phương thức cục bộ.
JesseBoyd

146

Bên cạnh đó @see, một cách tổng quát hơn để giới thiệu đến một lớp khác và có thể là phương thức của lớp đó {@link somepackage.SomeClass#someMethod(paramTypes)}. Điều này có lợi ích là có thể sử dụng được ở giữa một mô tả javadoc.

Từ tài liệu javadoc (mô tả về thẻ @link) :

Thẻ này rất giống với @see - cả hai đều yêu cầu các tham chiếu giống nhau và chấp nhận chính xác cùng một cú pháp cho gói. Class # thành viên và nhãn. Sự khác biệt chính là {@link} tạo liên kết nội tuyến thay vì đặt liên kết trong phần "Xem thêm". Ngoài ra, thẻ {@link} bắt đầu và kết thúc bằng dấu ngoặc nhọn để tách nó khỏi phần còn lại của văn bản nội tuyến.


68

Vì vậy, giải pháp cho vấn đề ban đầu là bạn không cần cả tham chiếu "@see" và "{@link ...}" trên cùng một dòng. Thẻ "@link" là tự cung cấp và, như đã lưu ý, bạn có thể đặt nó ở bất cứ đâu trong khối javadoc. Vì vậy, bạn có thể kết hợp hai cách tiếp cận:

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

4
Câu trả lời này phải được chấp nhận vì hai câu trả lời khác không cho thấy rằng '@link' hoặc '@see' cần phải ở nhiều hàng / ** * / không phải một hàng
Stoycho Andreev

1
@Sniper, {@link }hoạt động tốt trong một nhận xét Javadoc một hàng, có lẽ bạn đang đề cập đến thực tế là chúng không hoạt động với các nhận xét bắt đầu bằng //? /** */là Javadoc và cần thiết cho mọi hàm Javadoc.
Jase

Có @Jase Tôi đã gặp chính xác điều này, nhận xét cần phải là / ** * /, nhưng không phải //
Stoycho Andreev

6
@Sniper Tôi không nghĩ rằng cần phải có câu trả lời được chấp nhận bởi vì đây là câu hỏi Javadoc bắt đầu - nên thường hiểu rằng Javadoc chỉ hoạt động trong các bình luận Javadoc.
Jase

@Jase đồng ý với bạn, nhưng tôi tin rằng nguồn thông tin như Stackoverflow cần giải thích bằng các ví dụ không được trích dẫn từ tài liệu của Oracle hoặc một số tài liệu khác, điều này không rõ ràng. Câu trả lời này là câu trả lời duy nhất có ví dụ, trên hai câu trả lời là trích dẫn.
Stoycho Andreev
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.