문제

다음 코드가 있다고 가정 해 봅시다.

public class MainClass {
    public static void main(String[] args) {
        System.out.println(sumNumbers(10, 10));
    }

    //@requires a >= 10;
    //@ensures \result < 0;
    public static int sumNumbers(int a, int b) {
        return a+b;
    }
}

여기서 두 가지를 만들 수 있습니다.

코드 계약을 사용합니다 (이 경우 주석에있는 것은). Sumnumbers가 실행되고 <10이되면 즉시 예외가 발생합니다 (매우 설명적인 것은 아니지만).

Exception in thread "main" org.jmlspecs.jmlrac.runtime.JMLInternalNormalPostconditionError: by method MainClass.sumNumbers
    at MainClass.sumNumbers(MainClass.java:500)
    at MainClass.internal$main(MainClass.java:9)
    at MainClass.main(MainClass.java:286)

또는...

예외를 던져. 예외는 내가 원하는만큼 설명 할 수 있습니다. 또한 게시물 조건이 사실인지 아닌지 볼 때마다 기능의 끝을 확인해야합니다.

여기서 어느 것을 사용하고 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

나는 코드 계약의 아이디어가 마음에 들지만 설명 적 IllegalArgumentException (또는 이와 유사한) 나를 위해 팁을줍니다. 명시 적 예외 메시지를 얻는 것이 지원/생산 역할 (또는 개발)이 훨씬 명확합니다. 이는 진단의 헤드 스타트를 제공합니다. ).

다른 팁

프로그램의 정상 작동 중에 유효하지 않은 입력 이이 인수로 전달 될 것으로 기대하십니까? 그들이 있다면, 당신은 그것으로부터 회복 할 수 있습니까?

그렇다면 확인 된 예외는 갈 길입니다.

이런 종류의 사례에서 회복 할 수 없다면, 항상 계약을 맺고 큰 소리로 실패하지만 어느 경우에도 설명 오류 메시지를 사용합니다.

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