2013-07-03 8 views
2

특정 데이터에 언어 구문을 사용하여 시행 할 수없는 invariant가있는 프로젝트가 있지만이를 유지 관리하도록 코드를 작성하려고합니다. 그들이 어떤 이유로 고장난다면 그것은 내 코드가 버그가 있음을 의미합니다. 나는 이러한 불변성이 깨 졌는지를 발견 할 수있는 위생 체크 코드를 가지고있다. 그러나 그러한 조건에 응답하는 표준 자바 접근법이 무엇인지 모르겠다. 던져야 할 표준 예외가 있는가? 주장을 사용합니까?Java invariant exception

일부 지점에서 값이 잘못 설정되는 문제에 유의하십시오. 에러 자체는 온전한 체크 시점에서 발생하는 것이 아니라 오히려 과거에 발생했으며 온전한 체크는 이제 그것을 발견하고 있습니다 (즉, 온전한 체크 자체가 실행되고 있다는 것이 나쁘지 않습니다. 확인에 실패했습니다).

감사합니다.

답변

1

IllegalStateException을 던집니다. 이것은 이와 같은 목적을 위해 특별히 의도 된 것입니다. 깨진 불변 반응 할 응용 프로그램이 깨진 불변는 기본적으로 복구하고 경우 합리적인 첫 번째 단계

것이 얼마나 결정

+0

여러 회사에서 여러 가지 구현을 찾고 있습니다. 링크를 제공 할 수 있습니까? 감사. – joshlf

+0

@Jashaszun ['IllegalStateException']을 원하셨습니까 (http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalStateException.html)? – Jeffrey

+0

@Jeffrey 죄송합니다. 예. 그것이 내가 말하고자했던 것입니다. – Jashaszun

1

는 코드가, 내가 두 번째 IllegalStateException.html에 대한 대답은 (당신이 할 수 있습니다 버그를 의미 디버깅을 목적으로하는 유용한 컨텍스트를 추가하십시오. 예를 들어, 깨진 불변 변수의 변수) - 검사되지 않은 예외로 인해 실행중인 스레드가 중지됩니다.

깨진 불변 변수에서 복구 할 수있는 경우 (일부 인수를 현저한 기본값으로 대체하여 두 번째 시도) - 확인 된 예외를 던져서 상위 계층 중 하나에서 catch하고 B 계획을 실행하려고 할 수 있습니다.

+0

안녕하세요, 저는 방금 당신의 대답에 대한 답변으로 약간의 질문을 명확히했습니다 (전에 서술 한 내용을 전적으로 받아 들였을 때, 여전히 합리적이었고 여전히 그렇습니다). 문서에 따르면 : "불법적이거나 부적절한 시간에 방법이 호출되었다는 신호." 이 변수는이 값을 right/now /가 아니어야하는 것이 아니라 오히려 그 값을 갖거나 갖지 않아야하기 때문에 옳지 않습니다. 아직도, 그것은 정말로 가깝습니다. 그것은 거의 옳은 일입니다. – joshlf

+0

Ok.Why 당신은 다음을 시도하지 않습니다 : 논리적 인 방법의 순서로 계산을 분할합니다. 각 방법은 이전 단계의 데이터를 사용하지만, 먼저 그것에 대한 점검을 수행하고 실패하면 IllegalArgumentException을 던집니다. 실패합니다. 초기 세트의 생성자 값의 올바른 입력 매개 변수가 있는지 확인하기 위해 동일한 작업을 수행해야합니다.이 방법을 사용하면 각 단계마다 올바른 입력을 얻을 수 있습니다. – diy

+0

이 특정 컨텍스트에서는 작동하지 않지만, 이론. 어쨌든 IllegalStateException은 내가 찾은 것 중 가장 가까운 것이기 때문에 나는 갈 것이라고 생각한다. – joshlf