2012-03-17 3 views
0

특정 메서드를 호출하는 Object를 식별 할 수 있어야합니다. 그래서 예를 들어 내가 다음과 같은 경우java에서 특정 메소드를 호출하는 객체를 식별하는 방법이 있습니까?

가변 레이블의 개체를 식별 할 수 있어야하며 실제로 l이 아닌 setText를 호출해야합니다. 메서드 정보를 가져올 수 있도록 SOOT를 사용하고 있기 때문에이 메서드를 호출하는 개체의 형식 (이 경우 JLabel)을 가져올 수있었습니다. 그러나 실제로 필요한 것은이 메서드를 사용하는 개체입니다.

메서드를 호출하는 실제 개체를 식별 할 수있는 방법이 있습니까?

+1

궁극적 인 목표는 무엇입니까? –

+0

특정 메서드를 호출하는 GUI 구성 요소를 가져와 조작해야합니다 ... 예를 들어 레이블의 텍스트 색상을 변경하는 등 모든 메서드 호출이나 개체가 아니라 SOOT 출력에서 ​​얻는 메서드 – ict1991

+0

근본적인 문제는 객체는 메소드를 호출하지 않는다는 것입니다. * 메소드 호출은 어떤 객체 내부에있을 수 있습니다. (아마도 당신이 의도 한 것입니다.) 그러나 그것을 얻기위한 적당한 방법은 없습니다. (아주 * 추악한 호출 스택 덤프 조사를 제외하면, 디버깅에는 유용 ​​할 수 있지만 생산에는 분명히 유용하지 않을 수 있습니다. 암호). –

답변

0

적절한 방법이 없습니다. 메소드에 매개 변수를 전달하여 수행 할 작업을 알려야합니다. 스택 위로 스니핑하지 마십시오.

+0

GUI가있는 시스템의 코드를 수정할 수 없습니다 ... 내 시스템이 주어진 시스템에서 작동해야합니다. – ict1991

+0

그건 이해가되지 않습니다. 이 메소드를 수정 중입니다. – bmargulies

+0

@ ict1991 수정할 수없는 코드 (즉, 하위 클래스 및 재정의)에 후크합니다. – Java42

3

예, 누가 리플렉션을 통해 전화를하고 있는지 확인할 수 있습니다. 이렇게하는 방법에 대한 자세한 내용은이 스택 오버플로 게시글 : How do I find the caller of a method using stacktrace or reflection?을 참조하십시오.

그러나 나는 당신이 원하는 목표를 달성하는 데 필요한 것보다 훨씬 어려운 방법으로 뭔가를하려한다는 점에 우려 할 것입니다. 호출하는 사람을 알아야하는 하위 메서드에 매개 변수로 "this"를 전달할 수 있습니까?

+0

다른 시스템이 제공 한 다른 시스템에 대한 정보를 알아야하는 도구를 만들고있어 어떤 방식 으로든 시스템을 수정할 수 없습니다. – ict1991

+0

리플렉션을 시도하고 내가 관리하는 방법을 알려 드리겠습니다 ... 정보를 주셔서 감사합니다 – ict1991

+0

일반적으로 반사에 익숙하십니까? –