>Java >java지도 시간 >개발자가 Java에서 확인된 예외를 반대하는 이유는 무엇입니까?

개발자가 Java에서 확인된 예외를 반대하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-05 09:51:12695검색

Why Do Developers Oppose Checked Exceptions in Java?

Against check 예외

수년 동안 저는 다음 질문에 대한 만족스러운 답변을 얻을 수 없었습니다. 일부 개발자는 왜 그렇게 반대합니까? 예외를 확인하려면? 나는 많은 대화를 나눴고, 블로그 게시물을 읽었으며, Bruce Eckel(확인된 예외에 반대하는 최초의 사람)의 의견을 읽었습니다.

현재 새로운 코드를 작성 중이며 예외 처리 방법에 많은 관심을 기울이고 있습니다. 나는 "우리는 확인된 예외를 좋아하지 않는다"는 군중의 관점을 이해하려고 노력하고 있지만 여전히 이해할 수 없습니다. 오류는 절대로 잡아서는 안 되는 것에 대한 것입니다(VM 땅콩 알레르기가 있는 사람, 실수로 땅콩 캔을 뿌린 사람)

런타임 예외는 프로그래머가 잘못한 일에 대한 것입니다(프로그래머가 배열을 사용하여 범위를 벗어났습니다)

예외(실행 중 제외) 예외) 있음 프로그래머의 통제 범위를 벗어나는 작업에 사용됩니다(파일 시스템에 파일을 쓰는 동안 디스크가 꽉 차서, 프로세스의 파일 핸들 수 제한에 도달하여, 파일을 더 이상 열 수 없습니다)
  • throwable 객체는 모든 예외 유형 종류의 부모일 뿐입니다.
  • 제가 자주 듣는 주장은 예외가 발생하면 개발자가 해야 할 일은 프로그램을 종료하는 것뿐이라는 것입니다.
  • 내가 듣는 또 다른 일반적인 주장은 확인된 예외로 인해 코드를 리팩터링하기가 더 어렵다는 것입니다.
  • "그만둘게요" 인수의 경우 종료하더라도 합리적인 오류 메시지를 표시해야 합니다. 오류 처리를 미루면 명확한 종료 이유 없이 프로그램이 종료될 때 사용자가 별로 기뻐하지 않을 것입니다.

"리팩토링이 어렵다"는 군중의 경우 이는 적절한 추상화 수준이 선택되지 않았음을 나타냅니다. IOException을 발생시키는 메소드를 선언하는 대신 IOException을 진행 상황에 더 적합한 예외로 변환해야 합니다.

저는 Main의 catch(Exception)(또는 어떤 경우에는 프로그램이 정상적으로 종료되도록 하는 catch(Throwable))을 래핑하는 것에 열광하지 않지만 항상 필요한 특정 예외를 포착합니다. 이렇게 하면 허용됩니다. 최소한 적절한 오류 메시지를 표시하려면

사람들이 절대 대답하지 않는 질문은 다음과 같습니다.


Exception
하위 클래스 대신 RuntimeException
하위 클래스를 발생시키는 경우
이 무엇을 잡아야 하는지 어떻게 알 수 있나요?



예외를 포착하는 것이 답이라면 여전히 시스템 예외와 동일한 방식으로 프로그래머 오류를 처리하는 것입니다. 제가 보기에는 그게 잘못된 것 같습니다.


Throwable을 포착하더라도 여전히 시스템 예외와 VM 오류(및 유사한 오류)를 동일한 방식으로 처리하는 것입니다. 제가 보기에는 그게 잘못된 것 같습니다.


발생한 것으로 알고 있는 예외만 잡는 것이 답이라면 어떤 예외가 발생했는지 어떻게 알 수 있나요? 프로그래머 X가 새로운 예외를 발생시키고 이를 잡는 것을 잊어버리면 어떻게 됩니까? 제 생각에는 이것은 위험합니다.


스택 추적을 표시하는 메시지가 잘못되었다고 말하고 싶습니다. 체크 예외를 좋아하지 않는 사람들도 그렇게 생각하지 않나요?


그러므로 확인된 예외가 마음에 들지 않으면 그 이유를 설명하고 답이 없는 질문에 답해 주세요.


어느 모델을 사용해야 하는지에 대한 조언을 구하는 것이 아니라 사람들이 RuntimeException에서 확장하지만 Exception에서는 확장하지 않는지 찾고 있습니다. 및/또는 메서드에 throw를 추가하는 대신 예외를 포착한 후 RuntimeException을 다시 발생시키는 이유입니다. 사람들이 확인된 예외를 좋아하지 않는 이유를 이해하고 싶습니다.

위 내용은 개발자가 Java에서 확인된 예외를 반대하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.