public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
bar()
foo()
가
bar()
안에
try catch
없이 호출되었음을 알기 위해
bar()
메소드를 검사 할 수 있습니까?
public void foo(){
throw new Exception("foo");
}
public void bar(){
foo();
}
bar()
foo()
가
bar()
안에
try catch
없이 호출되었음을 알기 위해
bar()
메소드를 검사 할 수 있습니까?
당신은 프록시 내부의 전체 클래스를 포장에 관심이있을와의 InvocationHandler로 볼 수 있습니다 :
http://www.javalobby.org/java/forums/t18631.html
는 "foo는"이 immediatly 후라는 것을 본다면 특별한 일을 할 것입니다 귀하의 InvocationHandler " 바 "라고 생각합니다.
+1 매우 흥미로운 – JohnJohnGa
+1 - 내 지식을 향상시키는 데 유용한 링크입니다. 감사. 그러나 호출 된 메소드가 try..catch 또는 다른 것을 사용했다는 것을 보여줄 수는 없습니다. – Naved
@Vicente Plata는 프록시를 사용하여 어디서나 try catch를 추가해야한다는 뜻입니까? 왜냐하면 메서드가 이미 try catch를 포함하고 있기 때문에 필요하지 않습니다 ... – JohnJohnGa
내 지식이 걱정되는 한, 내부 구현을 볼 수있는 리플렉션 API는 없습니다. Class에있는 메서드 만 검사 할 수 있지만 메서드에 논리를 쓸 수는 없습니다.
또한 측면을 사용하거나 mockito 또는 유사한 프레임 워크의 테스트보기에서이 작업을 수행해야 할 수도 있습니다.
이 작업을 수행해야하는 상황을 알지 못하면 최상의 솔루션이 무엇인지 말할 수 없습니다.
응용 프로그램 코드에서 메서드 구현을 검사하고 해당 메서드가 내부적으로 try-catch
을 사용하지 못하는 경우 조건 분기와 같은 것으로 보입니다.
당신이 단위 테스트를 작성하지 않는 한, 내가 두 가지 이유로이 일을 낙담하자
1. 개발자가 자신의 애플리케이션 로직을 이해해야합니다.
코드가하는 일을 이미 알고 있어야합니다. 이 메서드가 닫힌 소스 API 의 일부인 경우 throw 된 예외 형식에 대한 설명서를 확인하십시오.
2. 불필요한 복잡성이 추가됩니다.
실행의 흐름이 메소드 구현에 의존하기 때문에, 당신은 그 동작이 자신의 소스의 상태에 달려있는 응용 프로그램 있을 것이다. (예. 디버깅을 더 어렵게 만드는, side-effects을 만들 수있는 방법을 변경.)
소스 코드 나 API 문서를 확인하여 방법 동작을 확인할 수있는 경우, 실행시 검증의 필요성은 무엇인가 ?
캐치되지 않은 검사 예외로 인해 컴파일에 실패합니다. RuntimeException이라면 더 흥미로울 것이다. 정적 코드 분석에는 몇 가지 해답이있을 수 있습니다. – TJR