อะไรคือข้อยกเว้นมาตรฐานในการโยนใน Java สำหรับการดำเนินการที่ไม่ได้รับการสนับสนุน / นำไปปฏิบัติ


308

โดยเฉพาะมีการExceptionใช้คลาสย่อยมาตรฐานในสถานการณ์เหล่านี้หรือไม่?


มันเหมาะสมที่จะใช้เมื่อชั้นไม่ได้ใช้วิธีการ แต่ชั้นเรียนเด็กอาจทำเช่นนั้น? ในคำอื่น ๆ ที่จะมีวิธีนามธรรมในชั้นเรียนที่ไม่ใช่นามธรรม
osa

@SergeyOrshanskiy มันมีประโยชน์สำหรับเมื่อขึ้นอยู่กับวิธีที่คุณสร้างวัตถุคุณจำเป็นต้องสร้างคลาสที่ไม่ระบุชื่อที่ใช้อินเทอร์เฟซเพื่อสร้างอินสแตนซ์ของตัวแปรสมาชิก แต่คุณไม่ต้องการให้มันใช้ หากคุณตั้งค่าเป็นnullและคุณใช้งานโดยไม่ตั้งใจ (หรือคนอื่นทำ) คุณจะได้รับNullPointerExceptionsซึ่งน้อยกว่าUnsupportedOperationExceptionsในกรณีนี้ เป็นเพียงตัวอย่าง
2rs2ts

คำตอบ:


438

java.lang.UnsupportedOperationException

โยนเพื่อระบุว่าการดำเนินการที่ร้องขอไม่ได้รับการสนับสนุน


4
@JarrodRoberson ตกลงข้อความนั้นควรถูกลบออกจากเอกสารประกอบการเรียนในกรณีนั้น ดูเหมือนจะมีข้อยกเว้นสำหรับแพ็คเกจอื่น ฉันเดาว่าถ้า Oracle ทำเช่นนั้นเราก็ควร ฉันจะรายงานข้อผิดพลาด
Maarten Bodewes

1
ระวังนี้เป็นไม่ได้ตรวจสอบ RuntimeExceptionคุณจะไม่ได้รับข้อเสนอแนะหรือความช่วยเหลือในการจัดการข้อยกเว้นเหล่านี้ในช่วงเวลารวบรวม หากสิ่งนี้ใช้สำหรับวิธีการสตับหรือความคืบหน้าในการทำงานคุณควรใช้ข้อยกเว้นที่ตรวจสอบบางประเภท
TastyWheat

221

แยกความแตกต่างระหว่างสองกรณีที่คุณตั้งชื่อ:

  • หากต้องการระบุว่าไม่สนับสนุนการดำเนินการที่ร้องขอและอาจจะไม่เกิดUnsupportedOperationExceptionขึ้น

  • หากต้องการระบุว่ายังไม่ได้ใช้งานตามคำขอให้เลือกระหว่างสิ่งนี้:

    1. ใช้NotImplementedExceptionจากapache commons-langซึ่งมีอยู่ใน commons-lang2 และได้รับการเพิ่มเข้าไปใน commons-lang3 อีกครั้งในเวอร์ชัน 3.2

    2. NotImplementedExceptionการดำเนินการของคุณเอง

    3. โยนUnsupportedOperationExceptionด้วยข้อความเช่น "ยังไม่ได้ใช้งาน"


1
ฉันจะไปกับสิ่งนี้เพราะมันดูสมเหตุสมผลสำหรับฉัน "ยัง" หรือ "ไม่เคย" ที่ระบุโดยข้อยกเว้นจะให้แนวคิดเกี่ยวกับวิธีการตอบสนองต่อสิ่งนี้
sschrass

3
#s 1 หรือ 2 เป็นที่นิยมอย่างมากในทางปฏิบัติ # 3 จับความแตกต่างทางความหมายระหว่าง "ไม่สนับสนุน" และ "ไม่ใช้งาน" แต่การมีชั้นเรียนแยกต่างหากทำให้การค้นหาอย่างรวดเร็วง่ายขึ้นเพื่อตรวจสอบว่าคุณยังไม่ลืมที่จะใช้สิ่งที่คุณควรทำก่อนทำ
Sean U

4
# 3 ดีที่สุดสำหรับวิธีที่ไม่ได้นำไปใช้เนื่องจากไม่ต้องใช้ห้องสมุดของบุคคลที่สามหรือทำงานเพิ่มเติมแม้ว่าจะใช้งานร่วมกัน
JoshDM

28

หากคุณสร้างฟังก์ชั่นใหม่ (ยังไม่ได้ใช้) ในNetBeansมันจะสร้างเมธอดเนื้อหาด้วยคำสั่งต่อไปนี้:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

ดังนั้นผมแนะนำให้ใช้UnsupportedOperationException


14

ถ้าคุณต้องการความละเอียดมากขึ้นและดีกว่า decription คุณสามารถใช้ NotImplementedException จากcommons-lang

คำเตือน: มีรุ่นก่อน 2.6 และหลังรุ่น 3.2 เท่านั้น

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