문제

저는 이런 질문을 받았는데 솔직히 당황스럽습니다.

추상 메서드를 작성하는 대신 다음과 같이 예외를 적용하여 가짜 메서드를 만들 수 있습니다.

public int someMethod(int someparameter) {
    throws new RuntimeException("unimplemented");
}

이를 수행하는 목적은 무엇이며 위의 가짜 메서드에 대한 코드 예제를 제공할 수 있는 사람이 있나요?어떤 도움이라도 대단히 감사하겠습니다.감사합니다.

도움이 되었습니까?

해결책

하나의 (아마도) 유효한 사용 사례를 생각할 수 있습니다.추상 클래스와 이를 확장한 프로젝트 전반에 걸쳐 여러 다른 클래스가 있습니다.(또는 추상 클래스가 오픈 소스 라이브러리에 있으므로 우주 전체의 다른 클래스가 이 클래스에서 확장될 수 있는지 전혀 알 수 없습니다.) 이제 이 클래스에 새로운 추상 메서드를 추가하는 것이 유용하다는 것을 알게 되었습니다.하지만 추가하면 abstract 메서드를 클래스에 추가하면 이미 확장한 다른 모든 클래스가 중단됩니다. 새 메서드에 대한 재정의를 포함하도록 해당 클래스를 변경해야 하기 때문입니다.따라서 어떤 경우에는 비추상 메서드로 추가하고 예외가 발생하는 경우에 예외를 발생시키는 것이 더 실현 가능한 것으로 간주될 수 있음을 알 수 있습니다. 새로운 이를 확장하는 클래스는 새 메서드를 사용하지만 재정의 메서드를 작성하는 것을 잊어버립니다.컴파일 타임에는 포착되지 않지만 적어도 테스트 중에는 포착될 수 있습니다.

새로운 추상 클래스를 정의하는 것도 가능하기 때문에 이 이유가 얼마나 타당한지 잘 모르겠습니다. NewImprovedWhatever 이는 새로운 메소드를 포함하기 위해 이전 메소드를 확장합니다.그러나 이는 유지 관리 문제를 야기할 수 있습니다.잘 모르겠습니다.

Java가 추상 클래스를 정의한다는 것을 알았습니다. java.net.SocketImpl, 두 개의 비추상 메서드가 포함되어 있습니다. shutdownInput() 그리고 shutdownOutput(), 기본 구현은 예외를 발생시키는 것입니다.

protected void shutdownInput() throws IOException {
  throw new IOException("Method not implemented!");
}

의견에는 1.3에 추가되었다고 나와 있으므로 아마도 이것이 이런 방식으로 수행된 정확한 이유일 것입니다.이미 확장된 다른 클래스의 수정이 필요하지 않습니다. SocketImpl.그러나 나는 확실히 모른다.

어쨌든, 클래스가 처음부터 그런 식으로 설계되었다면 이와 같은 디자인은 정말 나쁜 코드일 것입니다.그러나 우리가 수업에서 배우는 멋진 OO 개념은 기존 코드를 수정해야 할 때 실제로는 항상 그렇게 좋지는 않습니다.

다른 팁

때때로 UnsupportedOperationException 에서기능이 아직 구현되지 않은 방법.(또한 Apache Commons의 NotimplementEdException은 UnsupportedOperationException의 하위 클래스 인
그러나 그러한 코드는 결코 생산을하지 않았습니다.

이를 수행하는 목적은 의도적으로 나쁜 코드 을 작성하는 것입니다. 사람이 독자들을 혼란스럽게하고 그들이 그들의 코드를 통과하는 고뇌를 느끼기를 원한다면, 그런 코드는 그러한 코드를 씁니다. 또한 코드의 설계 기술이 부족합니다.
가난하게 작성되지 않은 API는 그러한 코드를 가질 것입니다.
그렇게하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top