java 获取泛型的属性_Java获取泛型的类型

Java的泛型是使用的擦除法实现,泛型的定义只在编译的时候有效,编译之后是没有保留泛型的类型信息的。

然而,擦除法的实现存在一些特列,在这些特例情况下,Java会记录泛型的类型信息,并且可以通过反射的Api来获取。

一)泛型继承

public class TypeTest {

public static void main(String[] args) {

doProxy(Lists.newArrayList(1), new Function() {

public List execute(Integer request) {

return Lists.newArrayList(String.valueOf(request));

}

});

}

//必须是class,interface获取不到泛型

abstract static class Function {

abstract List execute(F request);

}

public static List doProxy(List request, Function function) {

if (function.getClass().getGenericSuperclass() instanceof ParameterizedType) {

Type mySuperClass = function.getClass().getGenericSuperclass();

Type type = ((ParameterizedType) mySuperClass).getActualTypeArguments

你可能感兴趣的:(java,获取泛型的属性)