Что возвращает int.class - PullRequest
       2

Что возвращает int.class

5 голосов
/ 30 марта 2012

Я понимаю, что такое обертки, но из документации вы, кажется, сможете получить экземпляр объекта Class типа int.Возвращает ли это оболочку или какой-то экземпляр класса int?Потому что это не имело бы смысла, если бы оно имело место из-за обобщений и стирания типов.Не правда ли, что вы можете получить только экземпляры класса реальных классов, а не примитивов?Когда они говорят, представляют, они означают обертку чего-то еще?

Вот что говорит JavaDoc, и почему я запутался

TYPE

public static final Class TYPE

    The Class instance representing the primitive type int.

    Since:
        JDK1.1

1 Ответ

7 голосов
/ 30 марта 2012

Не правда ли, что вы можете получить только экземпляры класса реальных классов, а не примитивов?

В некотором роде.

Но иногда вам нужно иметь некоторые мета-данные для "примитивного целого числа".Например, при просмотре подписи метода.Затем вы получаете Class[] для параметров, и вам как-то нужно различать public void test(Integer x) и public void test(int x).

Так что для облегчения этого есть специальные экземпляры Class для примитивных типов.

Чтобы сделать это еще дальше, есть даже java.lang.Void.TYPE :

 Class<Void> x = void.class;

Проницательный Javadoc :

/**
 * Determines if the specified <code>Class</code> object represents a
 * primitive type.
 *
 * <p> There are nine predefined <code>Class</code> objects to represent
 * the eight primitive types and void.  These are created by the Java
 * Virtual Machine, and have the same names as the primitive types that
 * they represent, namely <code>boolean</code>, <code>byte</code>,
 * <code>char</code>, <code>short</code>, <code>int</code>,
 * <code>long</code>, <code>float</code>, and <code>double</code>.
 *
 * <p> These objects may only be accessed via the following public static
 * final variables, and are the only <code>Class</code> objects for which
 * this method returns <code>true</code>.
 *
 * @return true if and only if this class represents a primitive type
 *
 * @see     java.lang.Boolean#TYPE
 * @see     java.lang.Character#TYPE
 * @see     java.lang.Byte#TYPE
 * @see     java.lang.Short#TYPE
 * @see     java.lang.Integer#TYPE
 * @see     java.lang.Long#TYPE
 * @see     java.lang.Float#TYPE
 * @see     java.lang.Double#TYPE
 * @see     java.lang.Void#TYPE
 * @since JDK1.1
 */
public native boolean isPrimitive();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...