|
Spec-Zone .ru
спецификации, руководства, описания, API
|
| Содержание | Предыдущий | Следующий | Отражение Ядра Java |
Field, Method, и Constructor- которые отражают class и элементы интерфейса и конструкторов. Эти классы обеспечивают:Class это предусматривает конструкцию новых экземпляров Field, Method, и Constructor классы.Array обеспечивает методы, чтобы динамически создать и получить доступ к массивам Java.Modifier помогает декодировать информацию о модификаторе языка Java о классах и их элементах.InvocationTargetException используется, чтобы обернуть исключения, выданные отраженными методами или конструкторами.AccessibleObject и ReflectPermission- которые обеспечивают механизм, чтобы подавить стандартное управление доступом языка Java.java.lang пакет то отражение поддержки. Они: Class. Они представляют примитивные типы Java boolean, byte, char, short, int, long, float, и double, и ключевое слово void, во времени выполнения.Void- чтобы содержать ссылку на Class объект, представляющий ключевое слово void. Одна категория состоит из приложений, которые должны обнаружить и использовать весь из public элементы цели, основанной на объектах на ее времени выполнения class. Эти приложения требуют доступа времени выполнения к весь public поля, методы, и конструкторы объекта. Примерами в этой категории являются службы, такие как Java (ТМ) Бобы [1], и легкие инструменты, такие как объектные инспекторы. Эти приложения используют экземпляры классов Field, Method, и Constructor полученный через методы getField, getMethod, getConstructor, getFields, getMethods, и getConstructors из class Class.
Вторая категория состоит из сложных приложений, которые должны обнаружить и использовать элементы, объявленные данным class. Эти приложения нуждаются в доступе времени выполнения к реализации class на уровне, обеспеченном a class файл. Примерами в этой категории являются средства разработки, такие как интерпретаторы, инспекторы, и браузеры class, и службы среды выполнения, такие как Java (ТМ) Сериализация Объекта [2]. Эти приложения используют экземпляры классов Field, Method, и Constructor полученный через методы getDeclaredField, getDeclaredMethod, getDeclaredConstructor, getDeclaredFields, getDeclaredMethods, и getDeclaredConstructors из class Class.
Field, Method, и Constructor final. Только виртуальная машина Java может создать экземпляры этих классов; эти объекты используются, чтобы управлять базовыми объектами; то есть, к: final uninstantiable class Array обеспечивает static методы, которые разрешают создавать новые массивы, и получать и устанавливать элементы массивов.
Field, Method и Constructor реализуйте Member интерфейс. Методы Member используются, чтобы запросить отраженный элемент для основной информации об идентификации. Идентификация информации состоит из class, или взаимодействуйте через интерфейс, который объявил элемент, имя элемента непосредственно, и модификаторы языка Java (такой как public, protected, abstract, synchronized, и так далее) для элемента.
Field объект представляет отраженное поле. Базовое поле может быть переменной class (a static поле) или переменная экземпляра (не -static поле). Методы class Field используются, чтобы получить тип базового поля, и получить и установить значение базового поля на объектах.
Method объект представляет отраженный метод. Базовый метод может быть абстрактным методом, методом экземпляра, или class (static) метод. Методы class Method используются, чтобы получить типы формального параметра, тип возврата, и проверенные типы исключения базового метода. Кроме того, invoke метод class Method используется, чтобы вызвать базовый метод на целевые объекты. Экземпляр и абстрактный вызов метода используют динамическое разрешение метода, основанное на времени выполнения целевого объекта class и объявление отраженного метода class, имени, и типов формального параметра. (Таким образом допустимо вызвать отраженный метод интерфейса на объект, который является экземпляром class, который реализует интерфейс.) Статический вызов метода использует базовый статический метод объявления метода class.
Constructor объект представляет отраженного конструктора. Методы class Constructor используются, чтобы получить типы формального параметра и проверенные типы исключения базового конструктора. Кроме того, newInstance метод class Constructor используется, чтобы создать и инициализировать новый экземпляр class, который объявляет конструктора, если class является instantiable.
Array class является uninstantiable class, который экспортирует методы class, чтобы создать массивы Java с примитивным или компонентными типами class. Методы class Array также используются, чтобы получить и установить компонентные значения массива. Modifier class является uninstantiable class, который экспортирует методы class, чтобы декодировать модификаторы языка Java для классов и элементов. Модификаторы языка кодируются в целом числе, и используют константы кодирования, определенные Спецификацией виртуальной машины Java.
Class объекты, которые используются, чтобы представить восемь примитивных типов Java и void во времени выполнения. (Отметьте, что они Class объекты, не классы.) Базовый API Reflection использует эти объекты идентифицировать следующее: Class объекты. У них есть те же самые имена как типы, которые они представляют. Class на объекты можно только сослаться через следующий public
final static переменные:
java.lang.Boolean.TYPE
java.lang.Character.TYPE
java.lang.Byte.TYPE
java.lang.Short.TYPE
java.lang.Integer.TYPE
java.lang.Long.TYPE
java.lang.Float.TYPE
java.lang.Double.TYPE
java.lang.Void.TYPE
В частности они Class объекты не доступны через forName метод class Class. Class это предоставляет отражающий доступ к элементу, или ряд элементов class единственный источник для экземпляров Field, Method, и Constructor. Эти методы сначала делегируют проверку безопасности на менеджера по безопасности системы (если установлено), который бросает a SecurityException если запрос на отражающий доступ отрицается.protected, значение по умолчанию (пакет) доступ, и private классы и элементы - будут обычно происходить, когда человек отраженные элементы будет использоваться, чтобы работать на базовых элементах объектов, то есть, получить или установить значения полей, вызвать методы, или создать и инициализировать новые объекты. Неограниченный доступ, который переопределяет стандартные правила управления доступом языка, можно предоставить привилегированному коду, используя setAccessible метод. Этот метод наследован от AccessibleObject классами Field, Method, и Constructor.SecurityManager: void checkMemberAccess(Class,int) throws SecurityException
Class параметр checkMemberAccess идентифицирует class или интерфейс, к элементам которого нужно получить доступ. int параметр идентифицирует набор элементов, которые будут получены доступ - также Member.PUBLIC или Member.DECLARED.
void checkPackageAccess(String pkg) throws SecurityException
java.lang.RuntimePermission это влияет на эти политики. Они: accessDeclaredMembers. Это предоставляет возможности размышлять над непубличными элементами классов.accessClassInPackage{package name}. Это предоставляет доступ к классам в указанном пакете. Эти полномочия определяются менеджером безопасности.SecurityException. Если запрошенный доступ к набору предоставляют, метод должен возвратиться. Как утверждено earler, стандартное управление доступом языка Java будет обычно осуществляться, когда отраженный элемент от этого набора будет использоваться, чтобы работать на базовом объекте, то есть, когда:
Field используется, чтобы получить или установить значение поляMethod используется, чтобы вызвать методConstructor используется, чтобы создать и инициализировать новый экземпляр classIllegalAccessException. Управление доступом языка Java может быть подавлено для определенного отраженного элемента, устанавливая флаг, используя setAccessible метод, как объяснено ниже.
public элементы и конструкторы) любого class это может соединиться против. По умолчанию код программы, который получает отражающий доступ к элементу или конструктору, может только использовать отраженный элемент или конструктора со стандартным управлением доступом языка Java. Стандартная политика может быть переопределена, вызывая отраженный элемент setAccessible метод. Возможность вызвать setAccessible методом поочередно управляют suppressAccessChecks цель разрешения ReflectPermission.
Есть два типа автоматических преобразований данных. Переносящиеся преобразования преобразовывают из значений типов примитивов к объектам типов class. Разворачивающие преобразования преобразовывают объекты типов class к значениям типов примитивов. Правила для этих преобразований определяются в "Обертывании и Разворачивании Преобразований."
Дополнительно, доступ к полю и вызов метода разрешают расширять преобразования на типах примитивов и ссылочных типах. Эти преобразования документируются в Спецификацию языка Java, раздел 5, и детализируются в "Расширяющихся Преобразованиях."
Field.get или Array.get, или когда это возвращается методом, вызванным через Method.invoke. Точно так же объектное значение автоматически разворачивается когда предоставлено в качестве параметра в контексте, который требует значения типа примитива. Эти контексты:
Field.set, где у базового поля есть тип примитиваArray.set, где у базового массива есть примитивный тип элементаMethod.invoke или Constructor.newInstance, где у соответствующего формального параметра базового метода или конструктора есть тип примитива Метод, который объявляется void возвращает специальную ссылку null когда это вызывается через Method.invoke.
Расширяющиеся преобразования выполняются во времени выполнения:
Field и ArrayField и ArrayMethod.invoke или Constructor.newInstancebyte к short, int, long, float, или doubleshort к int, long, float, или doublechar к int, long, float, или doubleint к long, float, или doublelong к float или doublefloat к double.java.lang именованный java.lang.reflect. Это избегает проблем совместимости, вызванных правилами импорта пакета значения по умолчанию Java. *As, используемые на этом веб-сайте, сроки "виртуальная машина Java" или "JVM", означают виртуальную машину для платформы Java.