Когда я собираю что-то вроде этого:
public class MyClass
{
void myMethod(String name, String options, String query, String comment)
{
...
}
}
и скомпилируйте это в файл класса, кажется, что имена аргументов потеряны. То есть, когда какой-то другой код Java ссылается на MyClass
и хочет вызвать или перезаписать myMethod
, моя среда IDE (в настоящее время Eclipse), похоже, получает сигнатуру этого метода из файла класса:
void myMethod(String arg0, String arg1, String arg2, String arg3);
Я знаю, что Eclipse (и, возможно, другие IDE) также позволяет мне предоставить ссылку на источник или javadoc (как указал Бишибуш) из MyClass
и может воспользоваться этим. Но мне любопытно, есть ли какой-нибудь способ сказать javac
включить имена в файл класса, чтобы пользователи этого класса могли видеть имена аргументов, даже если у них есть только файл класса.
Решение для занятий
Когда я компилирую класс с java -g:vars
, имена параметров включаются в файл класса. -g:vars
кажется эквивалентным Eclipse -> свойства проекта -> компилятор Java -> добавить атрибуты переменных в сгенерированные файлы классов.
Это решение было предложено несколькими авторами, но ответ Ника, наконец, убедил меня.
На моей машине Eclipse иногда использовал эту информацию, иногда - нет, что, вероятно, было моей ошибкой или ошибкой в Eclipse, но не проблемой с файлами классов или компиляцией. Во всяком случае, теперь я знаю, что информация определенно присутствует.
Но нет решения для интерфейсов
Хотя это работает (вроде) нормально для классов, это не работает для интерфейсов.
Для меня логическая причина, по-видимому, заключается в том, что -g: vars предоставляет только имена локальных переменных, что также указано в документации для javac. В теле метода его параметры очень похожи на локальные переменные, поэтому они охватываются -g: vars. Методы интерфейса не имеют тел, поэтому они не могут иметь локальные переменные.
Мой первоначальный вопрос касался только классов, потому что я не знал, что может быть какая-то разница.
Формат файла класса
Как указал gid , формат файла класса не поддерживает хранение имен параметров. Я нашел раздел в спецификации файла класса , в котором описывается структура данных, которая должна содержать имена параметров методов, но это определенно не используется при компиляции интерфейсов.
При компиляции класса я не могу сказать, используется ли упомянутая структура данных или Eclipse выводит имена параметров из использования параметров внутри тела метода. Эксперт может уточнить это, но я думаю, что это не так важно.