2012-01-27 35 views
224

Tôi muốn thực hiện một trong các phương pháp "không được chấp nhận" = không được sử dụng nữa.Làm cách nào để khai báo hoặc đánh dấu một phương thức Java là không được chấp nhận?

Nhưng tôi vẫn muốn có nó trong API của mình. Tôi chỉ muốn hiển thị "cảnh báo" cho bất kỳ ai sử dụng phương pháp đó.

Làm cách nào để đạt được điều đó?

+9

là @Deprecrated không phải là một lựa chọn cho bạn ? – templatetypedef

+11

Đó là, nhưng tôi không biết về nó ... đó là lý do tại sao tôi hỏi câu hỏi :) –

+11

Lưu ý cẩn thận chính tả '@ Không được chấp nhận'. 3 e's, không 4. (Cũng không có 'r';). –

Trả lời

467

Sử dụng @Deprecated on method. Đừng quên làm rõ lĩnh vực javadoc:

/** 
* Does some thing in old style. 
* 
* @deprecated use {@link #new()} instead. 
*/ 
@Deprecated 
public void old() { 
// ... 
} 
+17

Ví dụ hay luôn hữu ích, cảm ơn bạn. –

+1

Câu trả lời ngắn và tốt! – Robert

+5

Hãy chắc chắn là tốt đẹp nếu @Deprecated đã có một tham số cho những gì để sử dụng thay thế ... – LinuxLars

30

Có hai điều bạn có thể làm:

  1. Thêm @Deprecated chú thích để phương pháp, và
  2. Thêm một thẻ @deprecated đến javadoc của phương pháp

Bạn nên làm cả hai!

Trích dẫn các java documentation về chủ đề này:

Bắt đầu với J2SE 5.0, bạn không chấp nhận một lớp học, phương pháp, hoặc trường bằng cách sử dụng các chú thích @Deprecated. Ngoài ra, bạn có thể sử dụng thẻ @deprecated Javadoc cho nhà phát triển biết nên sử dụng cái gì để thay thế.

Sử dụng chú thích khiến trình biên dịch Java tạo cảnh báo khi lớp, phương thức hoặc trường không được chấp nhận được sử dụng. Trình biên dịch ngăn chặn cảnh báo không dùng nữa nếu một đơn vị biên dịch không dùng nữa sử dụng lớp, phương thức hoặc trường không được chấp nhận. Điều này cho phép bạn tạo các API cũ mà không tạo cảnh báo.

Bạn nên sử dụng thẻ Javadoc @deprecated với các nhận xét thích hợp giải thích cách sử dụng API mới. Điều này đảm bảo nhà phát triển sẽ có đường dẫn di chuyển khả thi từ API cũ sang API mới

+0

Điều này có nghĩa là chú thích javadoc được đề xuất mạnh mẽ *** ngoài việc chú thích, không phải là thay thế! Đó là lý do tại sao nó luôn luôn là tốt hơn để đặt cả hai. –

+0

@ morellet.d Cảm ơn bạn đã chỉ ra điều đó. Tôi đã cơ bản viết lại câu trả lời của tôi ngay bây giờ (tôi đã không đọc tài liệu một cách cẩn thận đủ!). Chúc mừng – Bohemian

7

Sử dụng annotation@Deprecated cho phương pháp của bạn, và bạn cũng nên đề cập đến nó trong javadocs của bạn.

3

Hãy xem chú thích @Deprecated.

68

Sử dụng cả chú thích @Deprecated và thẻ JavaDoc @deprecated.

Thẻ JavaDoc được sử dụng cho mục đích tài liệu.

Chú thích @Deprecated chỉ thị trình biên dịch là phương pháp không được chấp nhận. Đây là những gì nó nói trong tài liệu Sun/Oracle về đề tài này:

Sử dụng chú thích @Deprecated không chấp một lớp học, phương pháp, hoặc lĩnh vực đảm bảo rằng tất cả các trình biên dịch sẽ phát hành cảnh báo khi mã sử dụng rằng yếu tố chương trình. Ngược lại, không có gì đảm bảo rằng tất cả các trình biên dịch sẽ luôn đưa ra các cảnh báo dựa trên các thẻ Javadoc @deprecated Javadoc, mặc dù các trình biên dịch Sun hiện đang làm như vậy. Các trình biên dịch khác có thể không đưa ra các cảnh báo như vậy.Do đó, việc sử dụng chú thích @Deprecated để tạo cảnh báo có tính di động cao hơn dựa trên thẻ @deprecated Javadoc.

Bạn có thể tìm thấy những tài liệu đầy đủ tại How and When to Deprecate APIs

+1

Không hoàn toàn đúng. * Cả * javadoc và chú thích đều cho biết phương thức trình biên dịch không được chấp nhận – Bohemian

+14

@Bohemian Trên thực tế điều đó không hoàn toàn đúng. Chú thích được định nghĩa trong phần Đặc tả Ngôn ngữ Java 9.6.1.6 (http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.6.1.6), trong khi thẻ javadoc thì không. Vì vậy, chú thích là một phần của ngôn ngữ. Nếu bạn quyết định viết trình biên dịch Java của riêng mình, bạn có thể bỏ qua thẻ javadoc, nhưng bạn phải nhận ra chú thích. –

+0

@ ShaMan-H_Fel Tôi tin rằng mô hình javadoc cũng hoạt động. Bởi vì nó là sự lựa chọn duy nhất trước Java 5, và nó đã hoạt động. Khi bạn đánh dấu một phương thức bằng thẻ javadoc '@ deprecated' (trong Java 4-), trình biên dịch đã đánh dấu phương thức (lớp, trường) là không được chấp nhận và các IDE cho thấy cảnh báo, ngay cả khi không có nguồn. –

28

kể từ khi một số giải thích nhỏ bị mất tích

Sử dụng @Deprecated chú thích vào phương pháp như thế này

/** 
* @param baseprice 
* 
* @deprecated reason this method is deprecated </br> 
*    {will be removed in next version} </br> 
*    use {@link #setPurchasePrice()} instead like this: 
* 
* <blockquote> 
* <pre> 
* getProduct().setPurchasePrice(200) 
* </pre></blockquote> 
* 
*/ 
@Deprecated 
public void setBaseprice(int baseprice) { 
} 

nhớ để giải thích:

  • Tại sao phương pháp này không còn khuyến cáo, hãy nhớ đến dòng riêng biệt để có thể đọc </br>
  • Khi đó sẽ bị xoá (cho người dùng biết bao nhiêu họ vẫn có thể dựa vào phương pháp này nếu họ quyết định gắn bó với cách cũ)
  • Cung cấp một giải pháp hoặc liên kết đến các phương pháp bạn khuyên {@link #setPurchasePrice()}
Các vấn đề liên quan