Java反射,从方法中提取泛型类型



我有一个带有以下签名的java方法:

static <ContentType> Map<Object,ContentType> foo();

我想使用反射来根据ContentType动态改变方法的行为。为了实现这一点,我必须能够将ContentType作为对象来处理(可能是java.lang.reflect.Type的实例)。有人知道怎么做吗?这种情况可能发生吗?

不可能。Java中的泛型是"语法糖"。它们只在编译时使用,然后被删除,并且永远不会进入类文件。

这个问题有一些很好的信息。

在运行时检查可参数化类型本身,如java.util。列表中,没有办法知道它已被参数化为什么类型。但是,当您检查声明使用参数化类型的方法时,您可以在运行时看到可参数化类型被参数化为什么类型

Method method = MyClass.class.getMethod("getStringList", null);
Type returnType = method.getGenericReturnType();
if(returnType instanceof ParameterizedType){
  ParameterizedType type = (ParameterizedType) returnType;
  Type[] typeArguments = type.getActualTypeArguments();
  for(Type typeArgument : typeArguments){
      Class typeArgClass = (Class) typeArgument;
      System.out.println("typeArgClass = " + typeArgClass);
  }
}

最新更新