Постановка задачи:
Можно ли использовать Java Reflection для получения имен локально объявленные переменные? Учитывая фрагмент кода, например:
Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo();
Можем ли мы разработать метод, который точно определяет имена переменных, например:
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(***); // Placeholder for variable name access } }
Решение:
До Java 8 получение имен локальных переменных посредством отражения было невозможно. Однако в этой версии была введена частичная поддержка. Имена параметров, специализированный тип локальных переменных, стали доступны посредством отражения. Это оказалось полезным при замене таких аннотаций, как @ParameterName, обычно используемых в средах внедрения зависимостей.
Чтобы получить более полную информацию об именах локальных переменных, изучение файлов классов может дать некоторую информацию. Во время компиляции методы оптимизации иногда удаляют эти данные для экономии места. Однако, если он существует, атрибут таблицы локальных переменных метода перечисляет типы и имена переменных в соответствующих областях инструкций.
Инструменты разработки байт-кода, такие как ASM, потенциально могут предоставить механизмы для проверки этой информации во время выполнения. Учитывая нишевое применение этой возможности, прежде всего в средах разработки, такие библиотеки предлагают дополнительные возможности, помимо простого извлечения имен переменных.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3