泛型类型信息在运行时通过ParameterizedType已知

时间:2019-10-19 20:39:50

标签: java reflection type-erasure parameterized-types

在下面的示例中,泛型类型信息可在运行时通过ParameterizedType类获得。

import java.lang.reflect.Type;
import java.lang.reflect.ParameterizedType;

class Generic<T> {};

class NonGeneric extends Generic<Integer> {};

class Main {
    public static void main(String[] args) {
        ParameterizedType parameterizedType =
            (ParameterizedType)
            new NonGeneric().getClass().getGenericSuperclass();

        for (Type typeArg : parameterizedType.getActualTypeArguments()) {
            System.out.println(typeArg);
        }
    }
}

输出:

class java.lang.Integer

鉴于类型擦除的性质,这怎么可能?我曾希望此信息不可用。

0 个答案:

没有答案