В этой статье анализируется механизм отражения Java в примере. Поделитесь этим для вашей ссылки, следующим образом:
Отражение, я часто слышал, как они говорили, что я читал несколько материалов и мог использовать их в схеме дизайна, но я чувствовал, что у меня нет более глубокого понимания.
1. Давайте посмотрим на концепцию размышлений:
В основном это относится к способности, чтобы программа может получить доступ, обнаруживать и изменять свое собственное состояние или поведение, а также может корректировать или изменять состояние и связанную семантику приложения, описанную поведение на основе состояния и результаты его собственного поведения.
Отражение - это мощный инструмент в Java, который позволяет нам легко создавать гибкий код, который можно собрать при запуске без необходимости связывать исходный код между компонентами. Но неправильное использование отражения будет очень дорого!
Это головокружение, чтобы увидеть концепцию, продолжать читать.
2. Роль механизма отражения:
1. Декомпил: .class->. Java
2. Доступ к свойствам, методам, конструкторам и т. Д. Ява объектов с помощью механизма отражения;
Это кажется легче понять.
3. Давайте сначала посмотрим на классы, которые Солнце предоставляет нам механизм отражения:
java.lang.class; java.lang.reflect.constructor;
Мы можем запросить многие методы, атрибуты и другие операции в отражении этих четырех классов. Или вам нужно научиться постоянно запрашивать API?
4. Реализация конкретных функций:
1. Есть три способа получить класс по механизму размышлений.
// Первый метод: classc1 = class.forname ("Сотрудник"); Объект в Java Langue имеет метод GetClass Methode = New Employee ();2. Создайте объект: после получения класса мы создадим его объект и используем NewInstance:
Класс C = Class.Forname ("Сотрудник"); // Создать новый экземпляр класса, представленного этим классом ObjectO = C.NewInstance ();3. Получить атрибуты: разделенные на все атрибуты и указанные атрибуты:
①.
// Получить весь класс класса c = class.forname ("java.lang.integer"); // Получить все атрибуты? Field [] fs = c.getDeclaredFields (); // определить строку с переменной длиной, используйте для хранения атрибут stringbuffer sb = new stringbuffer (); // Разделил каждый атрибут на эту строку путем приложения метода // наиболее внешнего публичного определения sb.append (modifier.tostring (c.getmodifiers ()) + "class" + c.getsimplename (c.getmodifiers ()) + " + c.getsimplename (c.getmodifiers ()) +" + c.getsimplename ) +"{/n"); // Каждое свойство внутри для (поля поля: fs) {sb.append ("/t"); // space sb.append (модификатор .toString (field.getModifiers ()) + "); // Получить модификаторы атрибута, таких как публика, статика и т. Д. SB.Append (field.getType (). GetSiMplename () +" "); // Получить имя типа атрибута sb.append ( field.getName () + ";/n"); // имя свойства + enter} sb.append ("}"); System.out.println (sb);②.
public static void main (string [] args) бросает исключение {<span style = "Белое пространство: pre"> </span> // Предыдущие способы:/* Пользователь u = new user (); // set System.out.println (u.age); ); // Присвоение значению "110" атрибуту идентификатора o Object Idf.set (O, "110");4. Получить методы и методы строительства, больше не описывайте подробно, просто посмотрите на ключевые слова:
Метод ключевые слова
значение
getDeclaredMethods ()
Получите все методы
getReturnType ()
Получите тип возврата метода
GetParameterTypes ()
Получить тип входящего параметра метода
getDeclaredMethod ("имя метода", параметр type.class, ...)
Получите конкретный метод
Ключевые слова конструктора
значение
GetDeclaredConstructors ()
Получите все конструкторы
getDeclaredConstructor (parameter type.class, ...)
Получить конкретный конструктор
Родительский класс и родительский интерфейс
значение
getSuperClass ()
Получить родительский класс определенного класса
GetInterfaces ()
Получить интерфейс для определенного типа реализации
Таким образом, мы можем получить различное содержание класса и декомпилировать его. Для такого языка, как Java, который сначала компилируется, а затем работает, механизм отражения может сделать код более гибким и проще для реализации объектно-ориентированного.
5. Файлы конфигурации Reflection Plus делают нашу программу более гибкой:
При изучении моделей дизайна, когда обучение абстрактным фабрикам отражение используется для более удобного чтения строк ссылок на базу данных и т. Д., Поэтому я не очень понял это в то время, поэтому я скопировал соответствующим образом. Посмотрите на использование файлов Reflection + Configuration в .net:
Файл конфигурации, используемый в то время, был файлом app.config, а содержимое находилось в формате XML, а содержание связанной базы данных было заполнено в:
<Конфигурация> <pplysettings> <добавить key = "" value = ""/> </appsettings> </configuration>
Как написать отражение:
Assembly.Load («Имя текущей сборки»). CreateInstance («Имя текущего пространства имен». Имя класса будет создано);
Это преимущество состоит в том, что нам легко облегчить преобразование базы данных. Чтобы выбрать это.
Конечно, то же самое относится и к Java, за исключением того, что файл конфигурации здесь. Прочитайте содержимое в нем через отражение. Таким образом, код фиксирован, но мы можем изменить содержание файла конфигурации, что делает наш код намного более гибким!
Подводя итог, чтобы подвести итоги, изучение размышлений о Java снова и гибко его использование может сделать наш код более гибким, но он также имеет свои недостатки, то есть использование его уменьшит производительность нашего программного обеспечения и увеличит сложность, поэтому нам также необходимо использовать его осторожно.
Я надеюсь, что эта статья будет полезна для каждого программирования Java.