В Java есть примитивные типы и массивы, содержащие пакет? - PullRequest
5 голосов
/ 19 января 2011

В Java есть примитивные типы и массивы, содержащие пакет?

Возможно, нет, но просто хочу быть уверенным.

Ответы [ 4 ]

17 голосов
/ 19 января 2011

Простой ответ

Давайте проверим:

public static void main(final String[] args){
    System.out.println(long.class.getPackage());
    System.out.println(Object[].class.getPackage());
}

Выход:

1009 * нуль * null

Нет, они не: -)


Примитивные типы

Примитивные классы - это специальные конструкции, в которых нет пакета. Для справки см. Источник Long.TYPE, псевдоним для long.class:

/**
 * The <code>Class</code> instance representing the primitive type
 * <code>long</code>.
 *
 * @since   JDK1.1
 */
public static final Class<Long> TYPE =
       (Class<Long>) Class.getPrimitiveClass("long");

Как вы можете видеть, примитивный класс загружается через закрытый для пакета и собственный механизм:

static native Class getPrimitiveClass(String name);

и приведен к Class<Long> (для включения автобокса, наверное)

Типы оболочек и их примитивные типы

Кстати: каждый класс-оболочка имеет статическое конечное поле с именем TYPE, которое отображается на соответствующий класс примитивов, как показано в следующем коде:

private static Class<?> getPrimitiveClass(final Class<?> wrapperClass){
    try{
        final Field field = wrapperClass.getDeclaredField("TYPE");
        final int modifiers = field.getModifiers();
        if(Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers)
            && Modifier.isFinal(modifiers)
            && Class.class.equals(field.getType())){
            return (Class<?>) field.get(null);
        } else{
            throw new IllegalArgumentException("This is not a wrapper class: "
                + wrapperClass);
        }
    } catch(final NoSuchFieldException e){
        throw new IllegalArgumentException("This is not a wrapper class:"
            + wrapperClass + ", field TYPE doesn't exists.", e);
    } catch(final IllegalAccessException e){
        throw new IllegalArgumentException("This is not a wrapper class:"
            + wrapperClass + ", field TYPE can't be accessed.", e);
    }
}

public static void main(final String[] args){
    final List<Class<?>> wrappers =
        Arrays.<Class<?>> asList(
            Byte.class, Long.class, Integer.class,
            Short.class, Boolean.class, Double.class
            // etc.
        );
    for(final Class<?> clazz : wrappers){
        System.out.println("Wrapper type: " + clazz.getName()
            + ", primitive type: "
            + getPrimitiveClass(clazz).getCanonicalName());
    }

}

Выход:

Тип оболочки: java.lang. Байт, тип примитива: байт
Тип оболочки: java.lang.Long, тип примитива: long
Тип оболочки: java.lang.Integer, тип примитива: int
Тип оболочки: java.lang.Short, тип примитива: короткий
Тип оболочки: java.lang. Boolean, тип примитива: boolean
Тип оболочки: java.lang. Двойной тип примитива: двойной


Типы массивов

Массивы могут быть созданы с помощью Array.newInstance(type, length), который внутренне вызывает этот метод:

private static native Object newArray(Class componentType, int length)
throws NegativeArraySizeException;

Опять же, классы - это специальные конструкции, созданные нативным кодом (и у них нет пакета, иначе вы можете их где-нибудь найти)

4 голосов
/ 19 января 2011

Нет они не имеют, поскольку они не являются классами.

Примитив : Примитивный тип предопределен языком и названзарезервированное ключевое слово

массив : массив - это контейнерный объект, который содержит фиксированное количество значений одного типа.

1 голос
/ 19 января 2011

Нет, поскольку они являются языковыми конструкциями, а не классами как таковыми.

Однако вы можете иметь класс, представляющий примитивный тип в оболочке, например:

Integer.TYPE и др. полезно для размышлений.

Но вы увидите, что у тех еще нет пакета, т. Е.

Integer.TYPE.getPackage()

Возвращает ноль

1 голос
/ 19 января 2011

Нет, но есть объекты для переноса примитивных типов данных в пакет java.lang.

http://download.oracle.com/javase/6/docs/api/java/lang/package-summary.html

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