How to inspect a method using reflection

public void foo(){
    throw new Exception("foo");
}


public void bar(){
    foo();
}

Is it possible to inspect the method bar() in order to know that foo() называется без try catch внутри bar()?

3 ответа

Решение

Вы можете быть заинтересованы в том, чтобы обернуть весь класс в Proxy и посмотреть его с InvocationHandler:

http://www.javalobby.org/java/forums/t18631.html

Ваш InvocationHandler будет делать что-то особенное, если увидит, что "foo" вызывается сразу после "бара", я думаю.

Похоже, что ваше намерение состоит в том, чтобы код вашего приложения проверял реализацию метода и условную ветвь, когда этот метод не используется try-catch внутренне.

Если вы не пишите модульные тесты, позвольте мне отказаться от этого по двум причинам:

1. Разработчик должен понимать логику своего приложения.

Вы уже должны знать, что делает ваш код. Если метод является частью API с закрытым исходным кодом, проверьте документацию на наличие типов исключений.

2. Это добавляет ненужную сложность.

Поскольку поток выполнения зависит от реализации метода, у вас будет приложение , поведение которого зависит от состояния его собственного источника. (Например, изменение метода может создать побочные эффекты, что затрудняет отладку.)

Если вы можете определить поведение метода, проверив исходный код или документацию по API, что нужно для проверки во время выполнения?

Насколько я знаю, нет такого API отражения, который позволял бы видеть внутренние реализации. Вы можете только проверить методы, присутствующие в классе, но не можете логики, написанной в методе.

Другие вопросы по тегам