Да, можно делать то, что вы просите, хотя определенно есть лучшие способы сделать это - наиболее очевидным было бы создание реализации MyInterface по умолчанию, а затем его подкласса «трассировки», который расширяет и журналы перед вызовом версии суперкласса.
Если инструментарий является единственным вариантом, то при запуске во время разработки вы можете запустить свой проект с помощью Java-агента в Java 5 или добавить Java-агент в путь к классам во время выполнения в Java 6. См. Документацию по инструментальным средствам . .
Для инструментов класса вы, вероятно, захотите использовать такой инструмент, как ASM . Шаги будут примерно такими:
- В своем классе агента реализуйте java.lang.instrument.ClassFileTransformer.
- В вашем методе agentmain () или premain () запрос на преобразование классов.
- Когда вы получаете вызов метода transform , вы можете проверить, реализует ли класс MyInterface, используя Class.getInterfaces ().
- При желании вы можете проверить, является ли его Class.getEnclosingClass () тем классом, в котором вы написали / нашли этот код.
- Если Класс проходит эти проверки работоспособности, то создайте ClassWriter, который добавляет запись в метод getSomethingElse (). ASMifier очень помогает при попытке выяснить, как сгенерировать нужный код.
Тогда в производстве ни один из этого кода не будет существовать. В процессе разработки вы добавляете свой Java-агент в свою среду, что позволит вам выполнять отладку.
Опять же, есть почти наверняка лучшие способы сделать это, но есть веские причины использовать инструментарий, и это мини-курс для этого.
Надеюсь, это поможет,