/** Copyright (c) 2020, guoxing, Co,. Ltd. All Rights Reserved*/
packagecom.xingguo.reflection.application;importlombok.extern.slf4j.Slf4j;importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;importjava.util.stream.Stream;/*** ArrayDemo
* 数组类型数据
*
*@authorguoxing
* @date 2020/11/20 9:15 AM
*@since
*/@Slf4jpublic classArrayDemo {public static voidmain(String[] args) {/*** 0: iconst_1
* 1: newarray int
* 3: astore_1
* 可以看到对于 " new int[1]" 这个操作主要是通过 newarray 指令实现*/
//对于 数组 作为特殊的java 原生对象,其具体实现实际是由 jvm 指令代替
int[] iArray = new int[1];
Class extends int[]> aClass =iArray.getClass();//判断当前类型是否为数组类型
boolean array =aClass.isArray();
log.info("当前类{}是否为数组类型:{}", aClass, array ? "是" : "否");//获取当前类的继承类
Type genericSuperclass =aClass.getGenericSuperclass();
log.info("{}", genericSuperclass.getTypeName());//获取实现的接口
Type[] genericInterfaces =aClass.getGenericInterfaces();
Stream.of(genericInterfaces)
.forEach(type->{//泛型类型
if (type instanceofParameterizedType) {
ParameterizedType parameterizedType=(ParameterizedType) type;
Type rawType=parameterizedType.getRawType();
log.info("{}", rawType);
Type[] actualTypeArguments=parameterizedType.getActualTypeArguments();
Stream.of(actualTypeArguments)
.forEach(t->{
log.info("{}", t);
});
}else{//普通类型
log.info("{}", type);
}
});//获取当前数组的元素类型
Class> componentType =aClass.getComponentType();
log.info("{},{}", componentType, componentType.isPrimitive());
}
}