Spec-Zone .ru
спецификации, руководства, описания, API
След: API Reflection
Урок: Классы
Получение Объектов Класса
Домашняя страница > API Reflection > Классы

Получение Объектов Класса

Точка входа для всех отражательных операций java.lang.Class. За исключением java.lang.reflect.ReflectPermission, ни один из классов в java.lang.reflect имейте общедоступных конструкторов. Чтобы добраться до этих классов, необходимо вызвать соответствующие методы на Class. Есть несколько способов получить a Class в зависимости от того, есть ли у кода доступ к объекту, имени class, типа, или существующего Class.

Object.getClass ()

Если экземпляр объекта доступен, то самый простой способ получить Class должен вызвать Object.getClass(). Конечно, это только работает на ссылочные типы, от которых все наследовались Object. Некоторые примеры следуют.

Class c = "foo".getClass();

Возвраты Class для String

Class c = System.console().getClass();

Есть уникальная консоль, связанная с виртуальной машиной, которая возвращается static метод System.console(). Значение, возвращенное getClass() Class соответствие java.io.Console.

enum E { A, B }
Class c = A.getClass();

A экземпляр перечисления E; таким образом getClass() возвраты Class соответствие типу перечисления E.

byte[] bytes = new byte[1024];
Class c = bytes.getClass();

Так как массивы Objects, также возможно вызвать getClass() на экземпляре массива. Возвращенный Class соответствует массиву с компонентным типом byte.

import java.util.HashSet;
import java.util.Set;

Set<String> s = new HashSet<String>();
Class c = s.getClass();

В этом случае, java.util.Set интерфейс к объекту типа java.util.HashSet. Значение, возвращенное getClass() соответствие class java.util.HashSet.

.class Синтаксис

Если тип доступен, но нет никакого экземпляра тогда, возможно получить a Class добавляя ".class" к имени типа. Это - также самый легкий способ получить Class для типа примитива.

boolean b;
Class c = b.getClass();   // compile-time error

Class c = boolean.class;  // correct

Отметьте что оператор boolean.getClass() произвел бы ошибку времени компиляции потому что a boolean тип примитива и не может быть разыменован. .class синтаксис возвращается Class соответствие типу boolean.

Class c = java.io.PrintStream.class;

Переменная c будет Class соответствие типу java.io.PrintStream.

Class c = int[][][].class;

.class синтаксис может использоваться, чтобы получить a Class соответствие многомерному массиву данного типа.

Class.forName ()

Если полностью определенное имя class доступно, возможно получить соответствие Class использование статического метода Class.forName(). Это не может использоваться для типов примитивов. Синтаксис для имен классов массива описывается Class.getName(). Этот синтаксис применим к ссылкам и типам примитивов.

Class c = Class.forName("com.duke.MyLocaleServiceProvider");

Этот оператор создаст class из данного полностью определенного имени.

Class cDoubleArray = Class.forName("[D");

Class cStringArray = Class.forName("[[Ljava.lang.String;");

Переменная cDoubleArray будет содержать Class соответствие массиву типа примитива double (то есть то же самое как double[].class). cStringArray переменная будет содержать Class соответствие двумерному массиву String (то есть идентичный String[][].class).

ВВЕДИТЕ Поле для Оберток Типа примитива

.class синтаксис является более удобным и привилегированным способом получить Class для типа примитива; однако есть другой способ получить Class. Каждые из типов примитивов и void имеет обертку class в java.lang это используется для упаковки типов примитивов к ссылочным типам. Каждая обертка class содержит названное поле TYPE который равен Class для обертываемого типа примитива.

Class c = Double.TYPE;

Есть class java.lang.Double который используется, чтобы обернуть тип примитива double всякий раз, когда Object требуется. Значение Double.TYPE идентично тому из double.class.

Class c = Void.TYPE;

Void.TYPE идентично void.class.

Методы тот Возврат Классы

Есть несколько API Reflection, которые возвращают классы, но к ним можно только получить доступ если a Class был уже получен любой прямо или косвенно.

Class.getSuperclass()
Возвращает class высшего качества для данного class.
Class c = javax.swing.JButton.class.getSuperclass();
class высшего качества javax.swing.JButton javax.swing.AbstractButton.
Class.getClasses()
Возвраты все общедоступные классы, интерфейсы, и перечисления, которые являются элементами class включая наследованные элементы.
Class<?>[] c = Character.class.getClasses();
Character содержит два задействованных класса Character.Subset и Character.UnicodeBlock.
Class.getDeclaredClasses()
Возвраты все интерфейсы классов, и перечисления, которые явно объявляются в этом class.
Class<?>[] c = Character.class.getDeclaredClasses();
Character содержит два общедоступных задействованных класса Character.Subset и Character.UnicodeBlock и один частный class Character.CharacterCache.
Class.getDeclaringClass()
java.lang.reflect.Field.getDeclaringClass()
java.lang.reflect.Method.getDeclaringClass()
java.lang.reflect.Constructor.getDeclaringClass()
Возвраты Class в котором были объявлены эти элементы. Объявления Анонимного класса не будут иметь объявления class, но будут иметь включение class.
import java.lang.reflect.Field;

Field f = System.class.getField("out");
Class c = f.getDeclaringClass();
Поле out объявляется в System.
public class MyClass {
    static Object o = new Object() {
        public void m() {} 
    };
    static Class<c> = o.getClass().getEnclosingClass();
}
Объявление class анонимного class, определенного o null.
Class.getEnclosingClass()
Возвращает сразу включение class class.
Class c = Thread.State.class().getEnclosingClass();
Включение class перечисления Thread.State Thread.
public class MyClass {
    static Object o = new Object() { 
        public void m() {} 
    };
    static Class<c> = o.getClass().getEnclosingClass();
}
Анонимный class, определенный o включают MyClass.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Классы
Следующая страница: Исследование Модификаторов Класса и Типов