2017-11-19 1 views
0

체크가 성공하지 못하면 몇 가지 검사를하는 메소드 M에 주석이 있습니다. 기본 메소드 M을 실행하지 않으려합니다. 호출자가 전화가 이유와 함께 성공하지 못했습니다.주석 예외가 발생했습니다.

체크를하지 못하면 예외를 던지겠다. 나는 IDE 나에게 방법을 밖으로 던져되지 않는 그 예외를 알려주기 때문에 특정 예외를 잡을 수없는 생각

  1. : 그래서 나는 여기 몇 가지 질문이 있습니까? 빠른 해킹을 위해 Exception을 잡은 다음 instance of 연산자를 사용하여 특정 예외를 얻습니다.

    더 좋은 방법이 있나요?

  2. 나는 예외를 던질 필요가없는 방법이 있습니까?

주석 측면 코드는 다음과 같은 : IDE는 단지 확인 된 예외를 확인할 수 있습니다

catch(Exception e){ 
    if(e instanceof CustomException){ 
     // do something 
    } 
} 
+6

코드를 설명하지 마십시오. 그것을 게시하십시오. –

+0

어떻게 지내니? Java는 주석의 결과로 예외를 던지지 않습니다.이를 수행하기 위해 바이트 코드 변환이있는 일종의 라이브러리가 필요합니다. 어떤거야? –

+0

@JBNizet 질문이 업데이트되었습니다. –

답변

4

:

@Before(value = "@annotation(abc)", argNames = "pjp, abc") 
public Object around(ProceedingJoinPoint pjp, ABC abc) throws Throwable { 
     if(notAllow()){ 
      throw new CustomException("Not allowed"); 
     } else { 
      pjp.proceed() 
     } 

    } 
} 

핸들러 코드는 다음과 같이 보인다. 예외를 RuntimeException까지 확장하십시오.

원하는 경우 언제든지 catch을 사용할 수 있습니다. IDE가 코드를 던지는지 확인할 수 없기 때문에 메소드가 선언 할 필요가 없으므로 언제든지 확인할 수 있습니다.

+0

감사합니다. 예외가 확인 된 것으로 생각했습니다. 어쨌든, 던지는 예외는 유일한 방법이라고 생각합니까? –

+0

@AkashdeepSaluja 호출자가 메서드가 실행되지 않았다는 것을 알 수있는 유일한 방법은 예외를 throw하는 것입니다. – Andreas

+0

@AkashdeepSaluja 그게 정확히 문제입니다. 예외는 체크 된 것입니다. 귀하의 메서드는 그것이 예외를 throw한다고 선언하지 않습니다. 따라서 컴파일러는이 검사 된 예외를 포착하는 것을 허용하지 않습니다. throws 절에서 선언되지 않았기 때문에 절대로 throw되지 않아야합니다. 그러나 메소드 호출을 인터셉트하는 aspect는 메소드의 throws 절에서 선언되지 않은 검사 된 예외를 throw하여 메소드의 계약을 파기합니다. 컴파일러는 메소드가 런타임에 인터셉트되는 것을 알 수 없으며 계약을 위반하고 있음을 알 수 없습니다. –

관련 문제