繁体   English   中英

Java Reflection,从方法中提取泛型

[英]Java Reflection, extract generic type from method

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

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

我想使用反射根据ContentType动态更改方法的行为。 为了实现这一点,我必须能够将ContentType作为对象(可能是java.lang.reflect.Type的实例)进行处理。 有谁知道如何做到这一点? 那有可能吗?

这是不可能的。 Java中的泛型是“语法糖”。 它们仅在编译时使用,但是随后被删除,从不将其放入类文件中。

这个问题对此有一些非常好的信息。

在运行时检查本身可参数化的类型(如java.util.List),无法知道已将参数化为哪种类型。 但是,当您检查声明使用参数化类型的方法时,您可以在运行时看到将参数化类型参数化为哪种类型

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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM