아주 어리석은 질문입니다. 주어진 코드 :
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
좋은 Java인지 아닌지 말할 수 있습니까? 내가 말하는 NumberFormatException
것은 확인되지 않은 예외입니다. 당신은 없는 의 일부로 지정 sum()
서명. 또한 내가 이해하는 한, 검사되지 않은 예외의 개념은 프로그램의 구현이 잘못되었음을 알리는 것이며, 더 나아가 검사되지 않은 예외를 포착하는 것은 런타임에 잘못된 프로그램을 수정하는 것과 같기 때문에 나쁜 생각 입니다.
누군가 다음 사항을 명확히 하시겠습니까?
NumberFormatException
메소드 서명의 일부로 지정해야합니다 .- 확인 된 예외 (
BadDataException
)를 정의NumberFormatException
하고 메서드 내부를 처리 한 다음BadDataException
. - 내 자신의 확인 된 예외 (
BadDataException
)를 정의하고 정규 표현식과 같은 방식으로 두 문자열의 유효성을 검사하고BadDataException
일치하지 않으면 내 던져야 합니다. - 당신의 생각은?
업데이트 :
어떤 이유로 사용해야하는 오픈 소스 프레임 워크가 아니라고 상상해보십시오. 메소드의 서명을보고 "좋아, 절대 던지지 않는다"라고 생각합니다. 그런 다음 언젠가 예외가 발생했습니다. 정상인가요?
업데이트 2 :
내 sum(String, String)
디자인이 나쁘다는 의견이 있습니다 . 나는 절대적으로 동의하지만 우리가 좋은 디자인을 가지고 있다면 원래의 문제가 결코 나타나지 않을 것이라고 믿는 사람들을 위해 여기에 추가 질문이 있습니다.
문제 정의는 다음과 같습니다. 숫자가 String
s 로 저장되는 데이터 소스가 있습니다 . 이 소스는 XML 파일, 웹 페이지, 2 개의 편집 상자가있는 데스크톱 창 등이 될 수 있습니다.
당신의 목표는이 2를 취하고이를 String
s로 변환하고 int
"합이 xxx"라는 메시지 상자를 표시 하는 논리를 구현하는 것 입니다.
이것을 설계 / 구현하기 위해 사용하는 접근 방식이 무엇이든 상관없이 다음과 같은 두 가지 내부 기능이 있습니다 .
- 당신이 변환 장소
String
에int
- 2
int
초 를 추가하는 장소
내 원래 게시물의 주요 질문은 다음과 같습니다.
Integer.parseInt()
올바른 문자열이 전달 될 것으로 예상 합니다 . 잘못된 문자열 을 전달할 때마다 프로그램 이 잘못 되었음을 의미합니다 ( " 사용자 가 바보입니다"가 아님). MUST 시맨틱 이있는 Integer.parseInt ()가 있고 다른 한편으로는 입력이 올바르지 않은 경우에 대해 확인해야하는 코드 조각을 구현 해야합니다 -SHOULD 시맨틱 .
그래서, 간단히 : 나는 구현 어떻게 SHOULD 의미를 난 단지 경우 MUST 라이브러리를 .