java学习-反射-数组

/*
 * Copyright (c) 2020, guoxing, Co,. Ltd. All Rights Reserved
 */
package com.xingguo.reflection.application;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.stream.Stream;

/**
 * ArrayDemo
 * 数组类型数据
 *
 * @author guoxing
 * @date 2020/11/20 9:15 AM
 * @since
 */
@Slf4j
public class ArrayDemo {

    public static void main(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 instanceof ParameterizedType) {
                        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());

    }
}

 

posted @ 2020-11-23 12:12  郭星  阅读(162)  评论(0)    收藏  举报