Làm thế nào để khai báo hoặc đánh dấu một phương thức Java là không dùng nữa?


284

Tôi muốn làm cho một trong những phương thức của mình "không dùng nữa" = không được sử dụng nữa.

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 cứ ai sử dụng phương pháp đó.

Làm thế nào tôi có thể đạt được điều đó?


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

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


4
ý kiến ​​không phải là nơi để trả lời!
mattumotu

Câu trả lời:


577

Sử dụng @Deprecatedtrên phương pháp. Đừng quên làm rõ trường javadoc:

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

2
Làm thế nào để bạn liên kết một thư viện bên ngoài? ví dụ: com.hello.api.PublicControll # new
Faizan Kazi

@LinuxLars hoàn toàn đồng ý! Java 9 đã thêm một vài thuộc tính để bắt đầu thực hiện reason""
khấu hao

3
Tôi muốn @deprecatedtin nhắn trong bình luận có thể được thêm vào @Deprecated(một vị trí để sửa tất cả) ...
U. Windl

88

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

Các @deprecated thẻ javadoc được sử dụng cho các mục đích tài liệu.

Các @Deprecatedchú thích chỉ thị các trình biên dịch rằng phương pháp này bị phản đối. Dưới đây là những gì nó nói trong tài liệu của Sun / Oracles về chủ đề này:

Sử dụng @Deprecatedchú thích để loại bỏ một lớp, phương thức hoặc trường đảm bảo rằng tất cả các trình biên dịch sẽ đưa ra các cảnh báo khi mã sử dụng phần 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 @deprecatedthẻ Javadoc, mặc dù các trình biên dịch Sun hiện đang làm như vậy. Trình biên dịch khác có thể không đưa ra cảnh báo như vậy. Do đó, việc sử dụng @Deprecatedchú thích để tạo cảnh báo sẽ dễ mang theo hơn dựa vào @deprecatedthẻ Javadoc.

Bạn có thể tìm thấy tài liệu đầy đủ tại Cách thức và thời điểm khấu hao API


1
Không hoàn toàn đúng. Cả javadoc và chú thích cho biết phương thức biên dịch đều không được dùng nữa
Bohemian

17
@ 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 ( java.sun.com/docs/books/jls/third_edition/html/ trộm ), 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.
ShaMan-H_Fel

@ ShaMan-H_Fel Tôi tin rằng mô hình javadoc cũng hoạt động. Bởi vì đó là 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 @deprecatedthẻ javadoc (trong Java 4-), trình biên dịch đã đánh dấu phương thức (lớp, trường) là không dùng nữa và các IDE đã hiển thị các cảnh báo, ngay cả khi không có nguồn nào.
Amir Pashazadeh

42

vì một số giải thích nhỏ đã bị mất

Sử dụng @Deprecatedchú thích trên phương thức 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:

  1. Tại sao phương pháp này không còn được khuyến khích . Những vấn đề phát sinh khi sử dụng nó. Cung cấp một liên kết để thảo luận về vấn đề này nếu có. (nhớ tách các dòng để dễ đọc<br/>
  2. Khi nào nó sẽ được gỡ bỏ . (cho người dùng của bạn biết họ vẫn có thể dựa vào phương pháp này bao nhiêu nếu họ quyết định theo cách cũ)
  3. Cung cấp giải pháp hoặc liên kết đến phương pháp bạn đề xuất {@link #setPurchasePrice()}

Không phải là <br/>, thay vì </br>?
argh1969

@ argh1969, đúng rồi! đừng nhớ nơi tôi đã lấy mẫu từ hồi đó. Nhưng tôi có thể xác nhận cả hai phiên bản hoạt động. Mặc dù tôi đang chỉnh sửa theo tiêu chuẩn.
azerafati

37

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

  1. Thêm @Deprecated chú thích vào phương thức và
  2. Thêm một @deprecatedthẻ vào javadoc của phương thức

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

Trích dẫn tài liệu java về chủ đề này:

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

Việc sử dụng chú thích làm cho trình biên dịch Java tạo ra các cảnh báo khi lớp, phương thức hoặc trường không dùng nữa được sử dụng. Trình biên dịch sẽ loại bỏ các 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 một lớp, phương thức hoặc trường không dùng nữa. Điều này cho phép bạn xây dựng các API kế thừa mà không cần tạo cảnh báo.

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


Nó có nghĩa là bình luận javadoc được khuyến khích mạnh mẽ ngoài chú thích, không phải là một thay thế! Đó là lý do tại sao nó luôn luôn tốt hơn để đặt cả hai.
morellet.d

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

8

Sử dụng chú thích @Deprecated cho phương thức của bạn và bạn cũng nên đề cập đến nó trong javadocs.


Liên kết hiện đã bị hỏng
Yetti99

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.