NotImplementedException ของ. NET ใน Java มีอะไรบ้าง?


คำตอบ:


516

คอมมอนส์หรั่งมีมัน UnsupportedOperationExceptionหรือคุณอาจจะโยน


26
ปรากฏว่า NotImplementedException ถูกลบออกจาก Commons Lang 3.0
Michael Younkin

13
ฉันคิดว่าเนื่องจาก UnsupportedOperationException เป็นส่วนหนึ่งของเฟรมเวิร์กคอลเล็กชันจึงควรใช้หากมีการใช้ในคอนเท็กซ์ของคอลเลกชัน มิฉะนั้นควรใช้ RuntimeException docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz


5
@RaviWallau ฉันเห็นสิ่งนี้: docs.oracle.com/javase/7/docs/api/java/lang/ ......มีความเห็นว่าคลาสนี้เป็นสมาชิกของ Java Collection Framework
L.Butz

3
มีการอ่านใน Commons Lang 3.2: commons.apache.org/proper/commons-lang/javadocs/api-3.2
qwertzguy

289

ฉันคิดว่าjava.lang.UnsupportedOperationExceptionเป็นสิ่งที่คุณกำลังมองหา


28
ฉันพูดว่ามันเป็นสิ่งที่แตกต่างกันมาก NIE ยังบอกว่ามันอาจยังไม่ได้ใช้งานที่ซึ่ง UOE บอกฉันว่ามันจะไม่เกิดขึ้น ...
Dykam

5
@Dykam แล้วมันจะไม่ใช่ NotImplementedYetException ใช่ไหม?
Yishai

106
@Dykam: new UnsupportedOperationException("Not implemented yet")- มีความสุข?
Michael Borgwardt

3
ฉันไม่ได้หมายความว่ามันแย่ลงมีกรณีใช้งานที่แตกต่างออกไป
Dykam

6
ใหม่ UnsupportedOperationException ("ยังไม่ได้ใช้งาน") เป็นแนวคิดที่ยอดเยี่ยม! :) ใน lang3 ด้วยเหตุผลบางอย่างผมไม่ได้มี NotImplementedException ดังนั้นนี้เป็นทางออกที่ดี
ufk

55

คุณสามารถทำได้ด้วยตัวเอง (นั่นคือสิ่งที่ฉันทำ) - เพื่อไม่ให้รำคาญกับการจัดการข้อยกเว้นคุณเพียงขยาย RuntimeException คลาสของคุณอาจมีลักษณะเช่นนี้:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

คุณสามารถขยายเพื่อรับข้อความ - แต่ถ้าคุณใช้วิธีการตามที่ฉันทำ (นั่นคือเพื่อเตือนความจำว่ายังมีบางสิ่งที่ต้องนำไปใช้) โดยทั่วไปแล้วไม่จำเป็นต้องมีข้อความเพิ่มเติม

ฉันกล้าพูดว่าฉันใช้วิธีนี้เพียงอย่างเดียวในขณะที่ฉันอยู่ในกระบวนการพัฒนาระบบทำให้ฉันง่ายขึ้นที่จะไม่ติดตามว่าวิธีการใดที่ยังไม่ได้ใช้อย่างถูกต้อง :)


3
ฉันชอบวิธีนี้ดีที่สุดเพราะง่ายต่อการมีตัวจัดการข้อผิดพลาดพิเศษมันง่ายต่อการค้นหาโดยการค้นหาการอ้างอิงทั้งหมดไปที่ตัวสร้าง NotImplementedException และมันเป็นโค้ดเพียงไม่กี่บรรทัด แต่มันก็ค่อนข้างไม่สะดวกที่จะต้องประกาศ class ใหม่ด้วยไฟล์ของมันเอง
D Coetzee

1
ฉันเห็นด้วย. มันดีกว่าการใช้UnsupportedOperationExceptionในความคิดของฉัน ตอนนี้ถ้ามีเพียง Java เท่านั้นที่จะเพิ่มสิ่งนี้ในไลบรารีทั่วไปของข้อยกเว้น!
บดขยี้

12

ดังที่กล่าวไว้ JDK ไม่มีการแข่งขันที่ใกล้ชิด อย่างไรก็ตามทีมของฉันบางครั้งก็มีข้อยกเว้นดังกล่าวเช่นกัน เราอาจได้ไปกับUnsupportedOperationExceptionคำแนะนำอื่น ๆ ตามที่แนะนำ แต่เราชอบคลาสยกเว้นที่กำหนดเองในห้องสมุดฐานของเราที่มีการก่อสร้างไม่สนับสนุน:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

วิธีการนี้มีประโยชน์ดังต่อไปนี้:

  1. เมื่อผู้อ่านเห็นNotYetImplementedExceptionพวกเขารู้ว่ามีการวางแผนการใช้งานและถูกลืมหรือยังอยู่ระหว่างดำเนินการในขณะที่UnsupportedOperationExceptionพูด (ตามสัญญาการเก็บรวบรวม ) ว่ามีบางสิ่งที่จะไม่ถูกนำไปใช้ นั่นเป็นเหตุผลที่เรามีคำว่า "ยัง" ในชื่อคลาส นอกจากนี้ IDE สามารถแสดงรายการไซต์การโทรได้ง่าย
  2. ด้วยคำเตือนการคัดค้านที่ไซต์การโทรแต่ละไซต์เครื่องมือวิเคราะห์ IDE และรหัสคงที่ของคุณสามารถเตือนคุณว่าคุณยังคงต้องใช้อะไรบ้าง (การเลิกใช้งานนี้อาจรู้สึกผิดกับบางคน แต่ในความเป็นจริงแล้วการเลิกใช้ไม่ จำกัด เฉพาะการประกาศการลบ )
  3. ตัวสร้างถูกคัดค้านไม่ใช่คลาส ด้วยวิธีนี้คุณจะได้รับคำเตือนการคัดค้านภายในวิธีที่ต้องใช้งานเท่านั้นไม่ใช่ที่importบรรทัด (JDK 9 แก้ไขสิ่งนี้ )

8

ไม่มีไม่มีและอาจไม่อยู่ที่นั่นเพราะมีการใช้งานที่ถูกต้องเพียงเล็กน้อยเท่านั้น ฉันจะคิดสองครั้งก่อนที่จะใช้ นอกจากนี้ยังเป็นเรื่องง่ายที่จะสร้างตัวเอง

โปรดอ้างอิงการสนทนานี้เกี่ยวกับสาเหตุที่เป็นไปได้ใน. NET

ฉันเดาว่าเข้าUnsupportedOperationExceptionมาถึงแม้ว่ามันจะไม่ได้บอกว่าการดำเนินการไม่ได้ใช้งาน แต่ไม่ได้รับการสนับสนุนแม้แต่ นั่นอาจหมายความว่าไม่มีการใช้งานที่ถูกต้องเป็นไปได้ เหตุใดการดำเนินการจึงไม่ได้รับการสนับสนุน มันควรจะอยู่ที่นั่นไหม? ปัญหาการแยกอินเตอร์เฟสหรือการทดแทน Liskov อาจจะเกิดขึ้น?

ถ้ามันอยู่ในระหว่างดำเนินการฉันจะไปToBeImplementedExceptionแต่ฉันไม่เคยพบว่าตัวเองกำหนดวิธีที่เป็นรูปธรรมและจากนั้นปล่อยให้มันนานมากมันจะเป็นการผลิตและจะต้องมีข้อยกเว้นดังกล่าว

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