Что такое дескриптор класса? - PullRequest
8 голосов
/ 24 мая 2010

Что такое дескриптор класса? Это Class объект определенного класса?

Ответы [ 3 ]

6 голосов
/ 24 мая 2010

Да, объект Class является дескриптором класса для определенного «класса».

С API :

Экземпляры этого класса представляют классы и интерфейсы в работающем приложении Java. Перечисление - это своего рода класс, а аннотация - это своего рода интерфейс. Каждый массив также принадлежит классу, который отражается как объект Class, который используется всеми массивами с одинаковым типом элемента и количеством измерений. Примитивные типы Java (логические, байтовые, char, short, int, long, float и double) и ключевое слово void также представлены в виде Class объектов.

Вот пример простого использования Class методов для рефлексивного описания типов:

static void describe(Class<?> clazz, String pad, String leadin) {
    if (clazz == null) return;
    String type =
        clazz.isInterface() ? "interface" :
        clazz.isArray() ? "array" :
        clazz.isPrimitive() ? "primitive" :
        clazz.isEnum() ? "enum" :
        "class";
    System.out.printf("%s%s%s %s ( %s )%n",
        pad, leadin, type, clazz.getSimpleName(), clazz.getName());
    for (Class<?> interfaze : clazz.getInterfaces()) {
        describe(interfaze, pad + "   ", "implements ");
    }
    describe(clazz.getComponentType(), pad + "   ", "elements are ");
    describe(clazz.getSuperclass(), pad + "   ", "extends ");
}
static void describe(Class<?> clazz) {
    describe(clazz, "", "");
    System.out.println();
}
public static void main(String[] args) {
    describe(boolean[][].class);
    describe(java.math.RoundingMode.class);
    describe(java.util.ArrayList.class);
    describe(void.class);
}

Приведенный выше фрагмент выдает следующий результат:

array boolean[][] ( [[Z )
   implements interface Cloneable ( java.lang.Cloneable )
   implements interface Serializable ( java.io.Serializable )
   elements are array boolean[] ( [Z )
      implements interface Cloneable ( java.lang.Cloneable )
      implements interface Serializable ( java.io.Serializable )
      elements are primitive boolean ( boolean )
      extends class Object ( java.lang.Object )
   extends class Object ( java.lang.Object )

enum RoundingMode ( java.math.RoundingMode )
   extends class Enum ( java.lang.Enum )
      implements interface Comparable ( java.lang.Comparable )
      implements interface Serializable ( java.io.Serializable )
      extends class Object ( java.lang.Object )

class ArrayList ( java.util.ArrayList )
   implements interface List ( java.util.List )
      implements interface Collection ( java.util.Collection )
         implements interface Iterable ( java.lang.Iterable )
   implements interface RandomAccess ( java.util.RandomAccess )
   implements interface Cloneable ( java.lang.Cloneable )
   implements interface Serializable ( java.io.Serializable )
   extends class AbstractList ( java.util.AbstractList )
      implements interface List ( java.util.List )
         implements interface Collection ( java.util.Collection )
            implements interface Iterable ( java.lang.Iterable )
      extends class AbstractCollection ( java.util.AbstractCollection )
         implements interface Collection ( java.util.Collection )
            implements interface Iterable ( java.lang.Iterable )
         extends class Object ( java.lang.Object )

primitive void ( void )

API ссылки

  • Class.getName()
    • Объясняет "прикольные" имена для массивов и примитивов

Ссылки

0 голосов
/ 24 мая 2010

Вы дали очень мало контекста, но «дескриптор класса» можно использовать как термин, используемый для описания данных, необходимых для десериализации объекта:

http://java.sun.com/javase/6/docs/platform/serialization/spec/class.html

В этом случае «дескриптор класса» на самом деле java.io.ObjectStreamClass. ObjectStreamClass описывает класс, но он отличается от самого класса.

0 голосов
/ 24 мая 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...