Возможно ли в Java доступ к исходному коду метода «рефлексивно»? - PullRequest
10 голосов
/ 14 октября 2009

Боюсь, что ответ - нет, но, возможно, один из вас удивит меня.

Спасибо.

Редактировать 1: Я знаю, что вопрос не имеет особого смысла, но я думаю, что смысл был понят, и, к сожалению, ответ - нет. В любом случае, я изменил название вопроса, добавив к нему слова «рефлексивно», и на всякий случай постараюсь лучше объяснить свои намерения.

У меня есть экземпляр типа, который является подклассом некоторого абстрактного типа, у которого есть некоторые известные методы. Я хочу получить во время выполнения строку с исходным кодом фактической реализации одного из таких методов в типе экземпляра.

Я думаю, что стоит указать, что фактическим типом экземпляра может быть анонимный внутренний класс .... Также, что «декомпилированная» версия исходного кода достаточно хороша. Метод, который я хочу получить, в большинстве случаев содержит только одну строку ....

Спасибо.

Ответы [ 3 ]

5 голосов
/ 14 октября 2009

Как указано другим: нет.

Вы можете обращаться к объектам класса, его методам и т. Д. Так, как это делает JVM. Это возможно только потому, что каждый класс хранит информацию о себе и своих членах при компиляции.

Если бы мне пришлось угадывать, это происходит в Объекте, корневом объекте в дереве наследования. Вы можете декомпилировать файл класса с помощью декомпилятора и использовать его для проверки. Но вы не можете получить доступ к исходному коду, как строка или что-то подобное.

Подумайте об этом: если у вас есть скала-код, скомпилированный для JVM, вы также не сможете вернуть скала-код обратно. И вы не можете получить Java-код.

Есть ли какая-то особая причина, по которой вы хотите это сделать? Можно ли как-нибудь еще попытаться достичь своей цели, какой бы она ни была?

1011 * привет *

4 голосов
/ 14 октября 2009

Нет, ты не можешь. Это тоже немного нелогично.

3 голосов
/ 14 октября 2009

Я так не думаю. Когда .java компилируется, он становится .class; насколько я знаю, в Java нет встроенного декомпилятора, который превращал бы .class обратно в .java. Все, что знает исполняемое приложение - это .class файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...