Обучение рефлексии Java <BR>Так называемое отражение можно понимать как операцию получения информации о типе объекта во время выполнения. Традиционные методы программирования требуют, чтобы программисты решали, какие типы использовать на этапе компиляции, но с помощью отражения программисты могут получать эту информацию динамически и писать более переносимый код. Строго говоря, отражение не является особенностью языка программирования, поскольку механизм отражения может быть реализован на любом языке, но если сам язык программирования поддерживает отражение, то реализация отражения будет гораздо удобнее.
1. Получите класс типов <BR>Мы знаем, что все в Java является объектом, а объекты, которые мы обычно используем, прямо или косвенно наследуются от класса Object. Класс Object содержит метод getClass, который можно использовать для получения класса типа экземпляра. Класс типа относится к классу, который представляет тип, поскольку все является объектом, и типы не являются исключением. В Java для представления типа используется класс типа. Все классы типов являются экземплярами класса Class. Например, вот следующий фрагмент кода:
А а = новый А();
если(a.getClass()==A.class)
System.out.println("равно");
иначе System.out.println("неравный");
Результат распечатывается «равно».
Можно видеть, что объект a является экземпляром A, определенного класса A. Результат, возвращаемый с помощью a.getClass() в операторе if, в точности соответствует классу типа A. Чтобы выразить определенный тип класса типа в Java, вы можете использовать метод «Type.class», поскольку a.getClass() получает класс типа A, то есть A.class, поэтому результатом выполнения приведенного выше кода является вывод «равно». Особо следует отметить, что классы типов имеют взаимно однозначное соответствие. Класс типа родительского класса и класс типа подкласса различны. Поэтому, предполагая, что A является подклассом B, следующий код получит выходные данные. «неравный»:
А а = новый А();
если (a.getClass() == B.class)
System.out.println("равно");
еще System.out.println("неравный");
Итак, если вы знаете экземпляр, вы можете получить класс типа этого объекта, используя метод экземпляра «getClass()», а если вы знаете тип, вы можете получить класс типа этого типа, используя метод «.class». .
2. Получите информацию о типе. <BR>После получения класса типа вы можете вызвать некоторые методы для получения информации о типе. Основные методы:
getName():String: Получите полное имя типа.
getSuperClass():Class: Получить прямой родительский класс этого типа. Если тип не имеет прямого родительского класса, верните значение null.
getInterfaces():Class[]: Получить все интерфейсы, реализованные этим типом.
isArray():boolean: Определить, является ли тип массивом.
isEnum():boolean: Определить, является ли тип перечислимым.
isInterface():boolean: Определить, является ли тип интерфейсом.
isPrimitive():boolean: определяет, является ли тип базовым, то есть является ли он int, boolean, double и т. д.
isAssignableFrom(Class cls):boolean: Определите, является ли этот тип родительским (предковым) классом или родительским (предковым) интерфейсом типа cls.
getComponentType():Класс: если типом является массив, возвращает тип компонента массива.
Кроме того, также могут выполняться такие операции, как преобразование типов. Основные методы:
asSubclass(Class clazz):Класс: Измените этот тип