2014-10-24 4 views
2

클래스에 m이라는 메서드가 있다고 가정 해보십시오. 전체 프로젝트에서 m이라고 부르는 모든 메소드를 찾으려고합니다. 이클립스의 호출 계층 구조 도구와 비슷하지만, 메소드 목록/배열을 출력해야한다는 점만 제외하면. 스택 추적이 작동한다고 생각하지 않으므로 정적으로 필요합니다. 리플렉션을 사용하여 이것을 구현할 수있는 방법이 있습니까?Java와 유사한 호출 계층 구조에서 가능한 모든 호출자를 얻는 방법

Eclipse의 호출 계층 구조 도구 예제에 대한 링크를 추가하여 Dog 클래스에서 barking() 메서드를 언급하는 모든 메서드를 찾습니다. Dog.hungry() 및 Cat.scratching()은 barking()을 호출합니다.

http://imgur.com/DzkIzCl

+1

이미 ([여기] 대답 http://stackoverflow.com/questions/930289/how-can-i-find- 모든 메소드 - that-call-a-given-method-in-java). – Muton

답변

1

「표준」자바 반사 아마 여기에 대한 도움이되지 않습니다.

오픈 소스 Reflection 라이브러리를 사용해 보겠습니다. 당신은을 통해 함께하는 방법을 검색 할 수 있습니다

:이되었다고 생각

Set<Member> usages = reflections.getMethodUsages(Method.class) 
+0

Im는 프로젝트를 일식에 복제하려고하므로 병을 만들 수는 있지만 계속 비워 둔다. 오픈 소스 라이브러리를 추가하는 것에 익숙하지 않습니다. maven을 설치하면 런타임시 새 이클립스 창이 열리는 플러그인이됩니까? – Cazs

+0

Maven을 사용해보십시오 ... 자체의 의존성 (jar)으로 추가 할 것입니다. 그러나 직접 다운로드하여 Eclipse 프로젝트에 로컬 종속성으로 추가 할 수 있다고 확신합니다. 봤어? ... 여기처럼 ... https://code.google.com/p/reflections/downloads/list – Drejc

+0

안녕하세요 Drejc, 링크에서 최신 항아리를 내린 다음 내 항아리 파일에 추가하고 내 Java에 들어갔습니다. 경로를 만들고 거기에 추가했습니다. 그러나 반사를 사용할 때 "import org.reflections.Reflections;"을 추가할지 묻습니다. "import static org.reflections.ReflectionUtils. *;"가 아닙니다. 둘 중 하나를 가져 오면 " useages = reflections.getMethodUsages (Method.class)"로 설정하면 오류가 발생합니다. 어떤 생각? 다시 한 번 감사드립니다. – Cazs