在Java中,原始类型和数组是否具有包含包?

在Java中,原始类型和数组是否具有包含包?,第1张

在Java中,原始类型数组是否具有包含包? 简单答案

让我们测试一下:

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

输出:


null

不,他们不:-)


基本类型

原始类是没有包的特殊构造。供参考,请参阅的来源

Long.TYPE
,别名为
long.class

public static final Class<Long> TYPE =       (Class<Long>) Class.getPrimitiveClass("long");

如您所见,原始类是通过package-private和native机制加载的:

static native Class getPrimitiveClass(String name);

并投射到

Class<Long>
(我想为了启用自动装箱)

包装器类型及其原始类型

顺便说一句:每个包装器类都有一个静态的final字段

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.Byte,原始类型:字节
包装类型:java.lang.Long,原始类型:long
包装类型:java.lang.Integer,原始类型:int
包装类型:java.lang.Short,原始类型:简短的
包装类型:java.lang.Boolean,原始类型:布尔
型包装类型:java.lang.Double,原始类型:double


数组类型

可以通过创建数组

Array.newInstance(type,length)
,该数组在内部调用此方法:

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

同样,这些类是由本机代码创建的特殊结构(它们没有包,否则您可以在某个地方找到它们)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5615686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存