2012-10-27 5 views
2

메서드를 작성할 때 항상 유효해야하는 것을 확인해야합니다.값을 반환하는 메서드와 그렇지 않은 메서드

메소드의 가격 인수가 유효하지 않은 경우 IllegalArgumentException을 던져야한다고 가정 해 보겠습니다. 프로그램을 작은 조각으로 나누기 위해 개인적인 방법을 사용합니다. 그러나 validatePrize과 같은 이름의 메소드를 작성하고 validatePrize 메소드를 호출 한 if 문을 체크인 한 다음 IllegalArgumentException을 던지는 부울을 리턴하는 것이 가장 좋습니다.

또는 메서드가 아무 것도 반환하지 않으며 예외가 throw되는 것이 더 좋습니까? 당신이 음 (-)의 값이 잘못된 인수 것을 알고 있기 때문에

답변

0

, 당신은 수행하여 방지 할 수 있습니다

if(val < 0) 
{ 
    return false; 
} 

나는 이러한 상황에 대해 지키는 것은 갈 수있는 가장 좋은 방법이라고 책에서 읽었습니다 . 그것은 "예외 기준"을 충족시키지 않거나 충족시키지 못합니다. 그래서 저는 부울을 반환 할 것입니다.

일부 사용자는 예외를 던지기를 원하지만 사용자에게 달려 있습니다.

2

이 답변은 주로 환경 설정을 기반으로합니다. 호출시 예외를 throw하지 않는 재사용 가능한 함수를 원한다면 부울 반환과 함께 validatePrize를 선택하십시오. 예외를 확인하기 위해서만 이것을 사용하고있는 경우는, 예외를 슬로우하는 validatePrize를 사용합니다. 이 경우에는 예외를 throw하는 validatePrize가 클래스 외부의 예외 처리에 사용될 수 있으므로 더 적합하다고 말할 수 있습니다.

0

메서드에 체크를 위임 할 경우 생성자의 코드가 복잡해지지 않도록 해당 메서드의 예외를 직접 throw 할 수 있습니다. 인수가 null의 경우이 라인은 관련 메시지와 함께 NullPointerException이 발생합니다

this.value = Preconditions.checkNotNull(value, "value must not be null"); 

: 이것은 구아바의 Preconditions 사용하는 일반적인 방법입니다. 인수가 널이 아닌 경우, 인수를 점검하고 한 행에 지정할 수있는 인수를 리턴합니다.

public static <T> T checkNotNull(T reference, Object errorMessage) { 
    if (reference == null) { 
    throw new NullPointerException(String.valueOf(errorMessage)); 
    } 
    return reference; 
} 

당신은 당신의 사용 사례에 대해 유사한 접근 방법을 사용할 수 있습니다 : 당신이 관심이 있다면

, 이것은이 code looks like 것입니다.

1

전적으로 다릅니다.

먼저 validatePrize은 부울 메서드처럼 들리지 않으므로 IMO는 아무 것도 반환하지 않습니다.

가드 절이 많은 경우 예외를 throw하십시오. 동일한 속성 컬렉션에 대해 앱에서 유효성 검사가 필요한 경우 – 메소드로 설정하고 해당 메소드를 가드의 일부로 사용할 수도 있습니다.

+1

저는 아직도 멍청한 데요. isPrizeValid로 메소드의 이름을 바꾸는 것만으로도 주위를 둘러 볼 수 있습니다 : P –

+0

@LewsTherin 분명히. 그렇다면 모든 것은해야합니다. 그것이 유효한지 아닌지를 결정하는 것 이상의 2 차적인 부작용이 없어야합니다. 나는 질문에 대답했다. –

0

내 생각에 대해서는 예기치 않은 인 경우 예외가 발생해야합니다. 널 포인터가이 값일 수 있으며, ID가 음수이면 항상 양수 여야합니다. 기본적으로 예외는 프로그램 내에서 문제를 보여주기 위해 사용됩니다. 단순히 사용자의 입력을 검증하는 경우 부울 및 테스트를 사용하십시오.

관련 문제