|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Точка входа для всех отражательных операций java.lang.Class. За исключением , ни один из классов в имейте общедоступных конструкторов. Чтобы добраться до этих классов, необходимо вызвать соответствующие методы на . Есть несколько способов получить a в зависимости от того, есть ли у кода доступ к объекту, имени class, типа, или существующего .
Если экземпляр объекта доступен, то самый простой способ получить должен вызвать . Конечно, это только работает на ссылочные типы, от которых все наследовались . Некоторые примеры следуют.
Class c = "foo".getClass();
Возвраты для
Class c = System.console().getClass();
Есть уникальная консоль, связанная с виртуальной машиной, которая возвращается static метод . Значение, возвращенное соответствие .
enum E { A, B }
Class c = A.getClass();
A экземпляр перечисления E; таким образом возвраты соответствие типу перечисления E.
byte[] bytes = new byte[1024]; Class c = bytes.getClass();
Так как массивы , также возможно вызвать на экземпляре массива. Возвращенный соответствует массиву с компонентным типом byte.
import java.util.HashSet; import java.util.Set; Set<String> s = new HashSet<String>(); Class c = s.getClass();
В этом случае, интерфейс к объекту типа . Значение, возвращенное соответствие class .
Если тип доступен, но нет никакого экземпляра тогда, возможно получить a добавляя ".class" к имени типа. Это - также самый легкий способ получить для типа примитива.
boolean b; Class c = b.getClass(); // compile-time error Class c = boolean.class; // correct
Отметьте что оператор boolean.getClass() произвел бы ошибку времени компиляции потому что a boolean тип примитива и не может быть разыменован. .class синтаксис возвращается соответствие типу boolean.
Class c = java.io.PrintStream.class;
Переменная c будет соответствие типу .
Class c = int[][][].class;
.class синтаксис может использоваться, чтобы получить a соответствие многомерному массиву данного типа.
Если полностью определенное имя class доступно, возможно получить соответствие использование статического метода . Это не может использоваться для типов примитивов. Синтаксис для имен классов массива описывается . Этот синтаксис применим к ссылкам и типам примитивов.
Class c = Class.forName("com.duke.MyLocaleServiceProvider");
Этот оператор создаст class из данного полностью определенного имени.
Class cDoubleArray = Class.forName("[D");
Class cStringArray = Class.forName("[[Ljava.lang.String;");
Переменная cDoubleArray будет содержать соответствие массиву типа примитива double (то есть то же самое как double[].class). cStringArray переменная будет содержать соответствие двумерному массиву (то есть идентичный String[][].class).
.class синтаксис является более удобным и привилегированным способом получить для типа примитива; однако есть другой способ получить . Каждые из типов примитивов и void имеет обертку class в это используется для упаковки типов примитивов к ссылочным типам. Каждая обертка class содержит названное поле TYPE который равен для обертываемого типа примитива.
Class c = Double.TYPE;
Есть class который используется, чтобы обернуть тип примитива double всякий раз, когда требуется. Значение идентично тому из double.class.
Class c = Void.TYPE;
идентично void.class.
Есть несколько API Reflection, которые возвращают классы, но к ним можно только получить доступ если a был уже получен любой прямо или косвенно.
Class c = javax.swing.JButton.class.getSuperclass();
Class<?>[] c = Character.class.getClasses();
Class<?>[] c = Character.class.getDeclaredClasses();
Character.CharacterCache.
import java.lang.reflect.Field;
Field f = System.class.getField("out");
Class c = f.getDeclaringClass();
public class MyClass {
static Object o = new Object() {
public void m() {}
};
static Class<c> = o.getClass().getEnclosingClass();
}
o null.Class c = Thread.State.class().getEnclosingClass();
public class MyClass {
static Object o = new Object() {
public void m() {}
};
static Class<c> = o.getClass().getEnclosingClass();
}
o включают MyClass.