Java에 .NET의 NotImplementedException과 같은 것이 있습니까?


답변:


516

커먼즈 랭 이 가지고 있습니다. 또는을 던질 수 UnsupportedOperationException있습니다.


26
NotImplementedException이 Commons Lang 3.0에서 제거 된 것으로 보입니다.
Michael Younkin

13
UnsupportedOperationException은 컬렉션 프레임 워크의 일부이므로 Collections의 conext에서 사용되는 경우에만 사용해야한다고 생각합니다. 그렇지 않으면 RuntimeException이 사용되어야합니다. docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz

9
그것은 java.lang의에서 오는 @LeonardButz : docs.oracle.com/javase/1.5.0/docs/api/java/lang/...
라비 Wallau에게

5
@RaviWallau 나는 이것을 보았다 : docs.oracle.com/javase/7/docs/api/java/lang/… 이 클래스는 Java Collection Framework의 멤버라는 것을 의미한다.
L.Butz

3
그것은 커먼즈 랭 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
@ 다이 캄 : new UnsupportedOperationException("Not implemented yet")-행복?
Michael Borgwardt

3
나는 그것이 더 나쁘다는 것을 의미하지는 않았다. 단지 다른 사용 사례가 있었다.
Dykam

6
new UnsupportedOperationException ( "아직 구현되지 않음")은 훌륭한 아이디어입니다! :) 어떤 이유로 든 lang3에서 NotImplementedException이 없으므로 이것이 훌륭한 솔루션입니다
ufk

55

예외 처리로 방해받지 않기 위해 RuntimeException을 확장하면 클래스가 다음과 같이 보일 수 있습니다.

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

메시지를 가져 오기 위해 확장 할 수는 있지만 내가하는 것처럼 메서드를 사용하면 (즉, 구현해야 할 사항이 있음) 일반적으로 추가 메시지가 필요하지 않습니다.

나는 시스템을 개발하는 과정 에서이 방법 만 사용한다고 감히 말하지만, 여전히 제대로 구현되지 않은 방법을 잃어 버리지 않도록합니다. :)


3
이 솔루션은 특별한 오류 처리기가 있기 쉽고, NotImplementedException 생성자에 대한 모든 참조를 찾아서 쉽게 찾을 수 있기 때문에이 솔루션이 가장 좋습니다. 코드는 몇 줄입니다. 그러나 자체 파일로 새 클래스를 선언 해야하는 것은 약간 불편합니다.
D Coetzee

1
동의한다. 이것은 UnsupportedOperationException내 의견으로 는 사용하는 것보다 낫습니다 . 이제 자바 만이 이것을 예외의 공통 라이브러리에 추가한다면!
호감

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( 수금 계약에 따라) ) 어떤 것도 결코 구현되지 않을 . 그래서 클래스 이름에 "yet"이라는 단어가 있습니다. 또한 IDE는 호출 사이트를 쉽게 나열 할 수 있습니다.
  2. 각 호출 사이트에서 사용 중단 경고가 표시되면 IDE 및 정적 코드 분석 도구가 여전히 구현해야하는 위치를 알려줍니다. (이 지원 중단 사용은 일부에게는 잘못된 느낌이 들지만 실제로 사용 중단은 제거 발표에만 국한되지 않습니다 .)
  3. 생성자는 클래스가 아니라 더 이상 사용되지 않습니다. 이렇게하면 구현이 아닌 구현이 필요한 메소드 내부에서 사용 중단 경고 만 표시됩니다 import(JDK 9는 이 문제 를 해결했습니다).

8

거기에는 유효한 용도가 거의 없기 때문에 존재하지 않을 수도 있고 없을 수도 있습니다. 나는 그것을 사용하기 전에 두 번 생각할 것입니다. 또한 실제로 자신을 만드는 것은 쉽습니다.

.NET에있는 이유에 대해서는 이 토론을 참조하십시오 .

나는 추측한다 UnsupportedOperationException 심지어 작업이 단지 구현되지 말하지만, 지원되지 않는되지 않지만, 가까이 온다. 이는 유효한 구현이 불가능하다는 것을 암시 할 수 있습니다. 작업이 지원되지 않는 이유는 무엇입니까? 거기 있어야합니까? 인터페이스 분리 또는 Liskov 대체 문제?

그것이 진행중인 작업이라면 갈 것입니다 ToBeImplementedException.하지만 구체적인 방법을 정의한 적이 없었습니다. 그런 다음 오랫동안 그것을 생산으로 만들면 그러한 예외가 필요할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.