Java Type 接口


#Java 反射、泛型与注解#


源码

Type 接口的全路径是 java.lang.reflect.Type ,代码是:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package java.lang.reflect;

public interface Type {
    default String getTypeName() {
        return this.toString();
    }
}

Class 类实现了该接口:

public String getTypeName() {
    if (this.isArray()) {   // 这段代码是为了获取数组的最细粒度类型
        try {
            Class<?> cl = this;
            int dimensions = 0;

            do {
                ++dimensions;
                cl = cl.getComponentType();
            } while(cl.isArray());

            return cl.getName() + "[]".repeat(dimensions);
        } catch (Throwable var3) {
        }
    }

    return this.getName();
}

使用示例

@Test
public void test_Long() {
    System.out.println(Long.class.getTypeName());
    // 上面的代码输出 java.lang.Long

    Long[] longArr = new Long[10];
    System.out.println(longArr.getClass().getTypeName());
    // 上面的代码输出 java.lang.Long[]

    List<Long> longList = new ArrayList<>();
    System.out.println(longList.getClass().getTypeName());
    // 上面的代码输出 java.util.ArrayList
}

( 本文完 )