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

NotImplementedExceptionJava 의 .NET과 같은 것이 있습니까?



답변

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


답변

나는 java.lang.UnsupportedOperationException당신이 찾고있는 것이라고 생각합니다 .


답변

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

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

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

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


답변

언급했듯이 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는 이 문제 를 해결했습니다).

답변

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

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

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

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


답변