จะประกาศหรือทำเครื่องหมายวิธี Java ว่าเลิกใช้แล้วได้อย่างไร


284

ผมอยากจะทำวิธีใดวิธีหนึ่งฉัน "เลิก" = ไม่ได้ใช้อีกต่อไป

แต่ฉันก็ยังอยากได้มันใน API ของฉัน ผมแค่อยากจะแสดง "เตือน" เพื่อทุกคนที่ใช้วิธีการที่

ฉันจะบรรลุสิ่งนั้นได้อย่างไร


10
@Deprecrated ไม่ใช่ตัวเลือกสำหรับคุณหรือไม่
templatetypedef

18
มันเป็น แต่ผมไม่ทราบว่าเกี่ยวกับมัน ... thats ทำไมฉันกำลังถามคำถาม :)
พาเวล Janicek


4
ความคิดเห็นไม่ใช่สถานที่สำหรับคำตอบ!
mattumotu

คำตอบ:


578

ใช้@Deprecatedวิธีการ อย่าลืมเกี่ยวกับการชี้แจงฟิลด์ javadoc:

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

2
คุณจะเชื่อมโยงห้องสมุดภายนอกได้อย่างไร เช่น: com.hello.api.PublicController # new
Faizan Kazi

@LinuxLars เห็นด้วยอย่างสมบูรณ์! Java 9 ได้เพิ่มคุณสมบัติสองสามอย่างเพื่อเริ่มต้นการเลิกใช้งานอย่างจริงจัง แต่การเพิ่มคุณสมบัติอื่นที่reasonมีค่าเริ่มต้นของ""ไม่สามารถเจ็บ
asgs

3
ฉันต้องการ@deprecatedข้อความในความคิดเห็นสามารถเพิ่ม@Deprecated(จุดเดียวที่จะแก้ไขพวกเขาทั้งหมด) ...
U. Windl

88

ใช้@Deprecatedคำอธิบายประกอบและ@deprecatedแท็ก JavaDoc

@deprecatedแท็ก JavaDoc ใช้สำหรับวัตถุประสงค์เอกสาร

@Deprecatedคำอธิบายประกอบคอมไพเลอร์แนะว่าวิธีการที่จะเลิก นี่คือสิ่งที่กล่าวในเอกสารของ Sun / Oracles ในหัวข้อ:

การใช้@Deprecatedคำอธิบายประกอบเพื่อคัดค้านคลาสเมธอดหรือฟิลด์ทำให้แน่ใจว่าคอมไพเลอร์ทั้งหมดจะออกคำเตือนเมื่อรหัสใช้องค์ประกอบของโปรแกรมนั้น ในทางตรงกันข้ามไม่มีการรับประกันว่าคอมไพเลอร์ทั้งหมดจะออกคำเตือนตาม@deprecatedแท็ก Javadoc เสมอแม้ว่าคอมไพเลอร์ของ Sun จะทำเช่นนั้น คอมไพเลอร์อื่น ๆ อาจไม่ออกคำเตือนดังกล่าว ดังนั้นการใช้@Deprecatedคำอธิบายประกอบเพื่อสร้างคำเตือนจึงพกพาได้มากกว่าที่อาศัย@deprecatedแท็ก Javadoc

คุณสามารถค้นหาเอกสารฉบับเต็มได้ที่วิธีการและเวลาที่จะเลิกใช้ API


1
ไม่จริงเลยทีเดียว ทั้งวิธี javadoc และหมายเหตุประกอบคอมไพเลอร์เลิกใช้แล้ว
Bohemian

17
@ โบฮีเมียนจริงๆแล้วมันไม่จริงเลย หมายเหตุประกอบถูกกำหนดในส่วนข้อกำหนดภาษา Java 9.6.1.6 ( java.sun.com/docs/books/jls/third_edition/html/… ) ในขณะที่แท็ก javadoc ไม่ได้ ดังนั้นคำอธิบายประกอบจึงเป็นส่วนหนึ่งของภาษา หากคุณตัดสินใจที่จะเขียนคอมไพเลอร์ Java ของคุณเองคุณอาจละเว้นแท็ก javadoc แต่คุณต้องรู้จักการเพิ่มความคิดเห็น
ShaMan-H_Fel

@ ShaMan-H_Fel ฉันเชื่อว่ารูปแบบ javadoc ใช้งานได้เช่นกัน เพราะมันเป็นตัวเลือกเดียวก่อน Java 5 และทำงานได้ เมื่อคุณทำเครื่องหมายเมธอดด้วย@deprecatedแท็ก javadoc (ใน Java 4-) คอมไพเลอร์ทำเครื่องหมายเมธอด (คลาส, ฟิลด์) เป็นค่าที่เลิกใช้แล้วและ IDEs แสดงคำเตือนแม้ว่าจะไม่มีแหล่งที่มาก็ตาม
Amir Pashazadeh

42

เนื่องจากคำอธิบายเล็กน้อยหายไป

ใช้@Deprecatedคำอธิบายประกอบในวิธีการเช่นนี้

 /**
 * @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) {
}

อย่าลืมที่จะอธิบาย:

  1. ทำไมวิธีนี้ไม่แนะนำให้ เกิดปัญหาอะไรขึ้นเมื่อใช้งาน ระบุลิงก์ไปยังการอภิปรายในเรื่องนี้หากมี (อย่าลืมแยกบรรทัดเพื่อให้สามารถอ่านได้<br/>
  2. เมื่อมันจะถูกลบออก (แจ้งให้ผู้ใช้ของคุณทราบว่าพวกเขายังคงสามารถพึ่งพาวิธีนี้ได้หากพวกเขาตัดสินใจที่จะยึดถือวิธีเดิม)
  3. ให้แก้ปัญหาหรือการเชื่อมโยงกับวิธีการที่คุณแนะนำ {@link #setPurchasePrice()}

ไม่ควรเป็น <br/> แทนที่จะเป็น </br>
argh1969

@ argh1969 ถูกต้อง! จำไม่ได้ว่าฉันได้รับแม่แบบจากที่ไหน แต่ฉันสามารถยืนยันการทำงานทั้งสองรุ่น แม้ว่าฉันจะแก้ไขมาตรฐาน
azerafati

37

มีสองสิ่งที่คุณสามารถทำได้:

  1. เพิ่ม@Deprecatedคำอธิบายประกอบให้กับวิธีการและ
  2. เพิ่ม@deprecatedแท็กใน javadoc ของวิธีการ

คุณควรทำทั้งสองอย่าง !

การอ้างถึงเอกสารคู่มือJavaในหัวข้อนี้:

เริ่มต้นด้วย J2SE 5.0 คุณคัดค้านคลาสเมธอดหรือฟิลด์โดยใช้คำอธิบายประกอบ @Deprecated นอกจากนี้คุณสามารถใช้ @deprecated แท็ก Javadoc บอกนักพัฒนาว่าจะใช้อะไรแทน

การใช้หมายเหตุประกอบทำให้คอมไพเลอร์ Java สร้างคำเตือนเมื่อใช้คลาสเมธอดหรือฟิลด์ที่คัดค้าน คอมไพเลอร์ระงับคำเตือนการเลิกใช้หากหน่วยการรวบรวมที่เลิกใช้แล้วจะใช้คลาสเมธอดหรือฟิลด์ที่คัดค้าน สิ่งนี้ทำให้คุณสามารถสร้าง API ดั้งเดิมได้โดยไม่ต้องสร้างคำเตือน

ขอแนะนำอย่างยิ่งให้คุณใช้แท็ก Javadoc @deprecated พร้อมความคิดเห็นที่เหมาะสมซึ่งอธิบายถึงวิธีการใช้ API ใหม่ สิ่งนี้ทำให้มั่นใจได้ว่านักพัฒนาจะมีเส้นทางการย้ายข้อมูลที่สามารถใช้การได้จาก API เก่าไปยัง API ใหม่



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.