Когда я скомпилирую что-то вроде этого:
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 указывает имена параметров из использования параметров внутри тела метода. Эксперт мог бы прояснить это, но это не так, как мне кажется.